【问题标题】:Generate lightweight JSON using DataContractJsonSerializer使用 DataContractJsonSerializer 生成轻量级 JSON
【发布时间】:2010-04-16 14:46:33
【问题描述】:

我正在尝试在 .Net 3.5 中使用 C# 和 DataContractJsonSerializer 生成 JSON。问题是我不知道如何为我需要的结果构建正确的结构。

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

最接近的方法是使用 Dictionary > 方法,但结果太大,因为我无法“命名”键。

这是我得到的:

[
   {
      "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 框架?我需要尽快生成它,因为这个项目旨在成为一个站点搜索引擎。

【问题讨论】:

    标签: c# json


    【解决方案1】:

    您应该考虑使用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}
    

    【讨论】:

      【解决方案2】:

      在 Dictionary 上使用 JavaScriptSerializer 而不是 DataContractJsonSerializer 将删除 Key/Value json 属性并将它们变成“键控”数组。

      http://msdn.microsoft.com/en-us/library/bb412168.aspx

      您是否已将 [DataContract] 和 [DataMember] 装饰器归因于您的类?

      http://msdn.microsoft.com/en-us/library/bb412179.aspx

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-07-29
        • 2013-04-10
        • 2010-12-25
        • 1970-01-01
        相关资源
        最近更新 更多