我正在尝试使用.Net 3.5中的C#和DataContractJsonSerializer生成JSON。问题是我无法弄清楚如何根据我需要的结果构建正确的结构。
我尝试使用哈希表,列表对象和arraylists重现PHP的关联数组,但无法弄清楚如何使用DataContractJsonSerializer以最佳方式生成我的结果,而无需创建自己的递归循环来构建JSON。 / p>
最接近的方法是使用字典< string,Dictionary< string,string>> aproach,但结果太大,因为我不能“命名”键。
这就是我得到的:
[
{
"Key":"status",
"Value":[
{
"Key":"value",
"Value":"ok"
}
]
},
{
"Key":"1",
"Value":[
{
"Key":"name",
"Value":"Result1"
},
{
"Key":"details",
"Value":"Result 1 details"
}
]
},
{
"Key":"2",
"Value":[
{
"Key":"name",
"Value":"Result2"
},
{
"Key":"details",
"Value":"Result 2 details"
}
]
},
{
"Key":"caller",
"Value":[
{
"Key":"value",
"Value":"1135345"
}
]
}
]
这就是我想要的:
{
"status":"ok",
"response":[
{
"id":1,
"name":"Result1"
"details":"Result 1 details"
},
{
"id":2,
"name":"Result2"
"details":"Result 2 details"
},
{
"id":3,
"name":"Result3"
"details":"Result 3 details"
],
"caller":"1135345"
}
有没有人知道如何使用C#生成这条JSON而无需加载整个Json.NET框架?我需要尽快生成这个项目,因为这个项目旨在成为一个网站搜索引擎。
答案 0 :(得分:2)
在Dictionary上使用JavaScriptSerializer而不是DataContractJsonSerializer将删除Key / Value json属性并将它们变为“键控”数组。
http://msdn.microsoft.com/en-us/library/bb412168.aspx
您是否已使用[DataContract]和[DataMember]装饰器将您的类归因?
答案 1 :(得分:2)
您应该查看JavaScriptSerializer。它是.NET框架的一部分(在System.Web.Extensions中分发)。要获得您想要的结果,您可以这样做:
var results = new[]
{
new{id=1,name="Result 1"},
new{id=2,name="Result 2"},
new{id=3,name="Result 3"}
};
var js = new JavaScriptSerializer();
var result = js.Serialize(new
{
status = "ok",
response = results,
caller = 1135345
});
您可以使用匿名类,也可以使用任何现有类。工作得很好:) 此调用的返回值为:
{"status":"ok","response":[{"id":1,"name":"Result 1"},{"id":2,"name":"Result 2"},{"id":3,"name":"Result 3"}],"caller":1135345}