2012-02-15 166 views
2

我有一个KeyPairValue的列表,我使用JavaScriptSerializer在Json对象中进行序列化。这个操作的输出给我这样的事情:自定义Json序列化

[{"Key":"A","Value":"ValueA"},{"Key":"D","Value":"ValueD"}] 

I'ld想摆脱那些“”周围的属性名称,以便它可以是这样的:

[{ Key:"A", Value:"ValueA"},{ Key:"D", Value:"ValueD"}] 

是否有实现这一目标的方式,或者我正在寻找什么只是不是Json序列化?

+0

我比JSON更喜欢JSON,因为它更容易阅读,编写速度更快。但键**“**”非常痛苦。 – brgerner 2012-02-15 15:20:58

+0

即你不想要json? – CodesInChaos 2012-02-15 15:35:51

回答

2

您可以Json.Net

StringWriter str = new StringWriter(); 
JsonTextWriter writer = new JsonTextWriter(str); 
writer.QuoteName = false; //<-- This is the trick 
JsonSerializer jsonSer = new JsonSerializer(); 
jsonSer.Serialize(writer, new { ID = 1, Name = "Jack" }); 

string jsonstr = str.ToString(); 

输出实现它是{ID:1,Name:"Jack"}

+0

正是我需要thanx很多! – 2012-02-15 15:38:31

+0

记录:生成的输出是海报要求的内容,但不是有效的Json(正如其他答案中所述)。许多Json消费者不会接受/处理这个字符串。你真的不应该把它称为Json,因为它现在不是了。 – Eddy 2012-02-15 16:03:43

+0

@Eddy,好的。我从现在开始将它命名* Myon *(我的对象符号) – 2012-02-15 16:25:02

1

据我所知,这是JSON必须要求在“”中嵌入你的密钥。这是因为JSON实际上是JavaScript对象的传输格式,因此它有一些具体的细节。

0

的RFC指定的名称是一个字符串,它也指定一个字符串必须包装在引号。

RFC 4627

值得注意的不同类型的值可以和某些类型的没有被包裹在引号。你也可以在规范中找到它。