2010-04-16 33 views
2

我试图在.NET 3.5中使用C#和DataContractJsonSerializer生成JSON。问题是我无法弄清楚如何为我需要的结果建立正确的结构。使用DataContractJsonSerializer生成轻量级JSON

我试图使用哈希表,列表对象和arraylists重现PHP的关联数组,但无法弄清楚如何使用DataContractJsonSerializer以最佳方式生成我的结果,而无需创建我自己的用于构建JSON的递归循环。

最接近的方法是使用字典<字符串,字典< 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框架?我需要尽快生成这个项目,因为此项目旨在成为网站搜索引擎。

回答

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}