首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用带有动态数据的JSon.NET反序列化JSON

使用带有动态数据的JSon.NET反序列化JSON
EN

Stack Overflow用户
提问于 2012-01-05 13:20:19
回答 5查看 29.6K关注 0票数 18

我正在尝试将一些JSON数据反序列化为应用程序的对象。到目前为止,它还不错,因为JSON数据上的属性是静态的(带有值的键)。现在我得到了一个结果,其中键是一段动态数据。

下面是一个JSON url示例:

http://en.wikipedia.org/w/api.php?action=query&format=json&pageids=6695&prop=info

由此产生的JSON为:

代码语言:javascript
复制
{ "query" : { "pages" : { "6695" : { "counter" : "",
          "lastrevid" : 468683764,
          "length" : 8899,
          "ns" : 0,
          "pageid" : 6695,
          "title" : "Citadel",
          "touched" : "2012-01-03T19:16:16Z"
        } } } }

好吧,这很好,只是我不能将“页面”数据反序列化为一个对象。如果我要为页面定义一个类,它必须看起来像这样:

代码语言:javascript
复制
public class 6695
{
    public string counter { get; set; }
    public int lastrevid { get; set; }
    public int length { get; set; }
    public int ns { get; set; }
    public int pageid { get; set; }
    public string title { get; set; }
    public string touched { get; set; }
}

为了反序列化内容(使用JsonConvert.Deserialize(jsondata)),我们都知道不能有一个名为6695的类。不仅如此,类的名称必须不同(例如,pageid=7145必须是7145类)。

如果我使用像JObject.Parse(content)这样的东西,然后以JArrays的形式访问条目,我似乎可以提取出一些值,但这相当丑陋,我仍然要尝试从页面数组中取出数据。

找个人来帮这个忙。我认为这并不少见,只是我以前遇到过不是JSON数据,不确定如何处理它。

谢谢!

PS忘记提到这是在Windows Phone 7上,所以“动态”是不可用的!

EN

回答 5

Stack Overflow用户

发布于 2012-01-05 13:38:32

最简单的方法。在这种特殊情况下,可能是go dynamic

代码语言:javascript
复制
dynamic data = Newtonsoft.Json.JsonConvert.DeserializeObject<dynamic>(json);
var lastRevId = data.query.pages["6695"].lastrevid;

您可以通过元素的[]名称引用任何元素,因此可以执行类似data["query"]["pages"]["6695"]["lastrevid"]的操作。这将通过所有在c#中名称无效的小对象。

票数 27
EN

Stack Overflow用户

发布于 2016-01-14 05:49:04

我希望下面的例子能有所帮助。我总是设计一个与json匹配的模型。当对象是您自己的模型设计时,使用对象要好得多。

从json生成c#模型非常容易。我使用这个网站来生成模型:http://json2csharp.com

一个完整的例子是:

C#代码:

代码语言:javascript
复制
    var targetsObject = Newtonsoft.Json.JsonConvert.DeserializeObject<YourModel>(jsonString);

JSON:

代码语言:javascript
复制
    {
      "investors": [
        {
          "name": "06",
          "programs": [
            {
              "name": "Conventional",
              "value": "3.5"
            },
            {
              "name": "FHA - Standard",
              "value": "5.0"
            },
            {
              "name": "FHA - Streamline",
              "value": ""
            },
            {
              "name": "VA",
              "value": "5.5"
            },
            {
              "name": "VA IRRRL",
              "value": "6.0"
            },
            {
              "name": "Non-Prime",
              "value": ""
            }
          ]
        },
        {
          "name": "07",
          "programs": [
            {
              "name": "Conventional",
              "value": "3.5"
            },
            {
              "name": "FHA - Standard",
              "value": "5.0"
            },
            {
              "name": "FHA - Streamline",
              "value": "7.0"
            },
            {
              "name": "VA",
              "value": "5.5"
            },
            {
              "name": "VA IRRRL",
              "value": ""
            },
            {
              "name": "Non-Prime",
              "value": ""
            }
          ]
        },
        {
          "name": "08",
          "programs": [
            {
              "name": "Conventional",
              "value": "3.5"
            },
            {
              "name": "FHA - Standard",
              "value": "5.0"
            },
            {
              "name": "FHA - Streamline",
              "value": "7.0"
            },
            {
              "name": "VA",
              "value": "5.5"
            },
            {
              "name": "VA IRRRL",
              "value": ""
            },
            {
              "name": "Non-Prime",
              "value": ""
            }
          ]
        },
        {
          "name": "09",
          "programs": [
            {
              "name": "Conventional",
              "value": "3.5"
            },
            {
              "name": "FHA - Standard",
              "value": "5.0"
            },
            {
              "name": "FHA - Streamline",
              "value": ""
            },
            {
              "name": "VA",
              "value": "5.5"
            },
            {
              "name": "VA IRRRL",
              "value": ""
            },
            {
              "name": "Non-Prime",
              "value": ""
            }
          ]
        },
        {
          "name": "10",
          "programs": [
            {
              "name": "Conventional",
              "value": ""
            },
            {
              "name": "FHA - Standard",
              "value": ""
            },
            {
              "name": "FHA - Streamline",
              "value": ""
            },
            {
              "name": "VA",
              "value": ""
            },
            {
              "name": "VA IRRRL",
              "value": ""
            },
            {
              "name": "Non-Prime",
              "value": "2.0"
            }
          ]
        },
        {
          "name": "11",
          "programs": [
            {
              "name": "Conventional",
              "value": "3.5"
            },
            {
              "name": "FHA - Standard",
              "value": "5.0"
            },
            {
              "name": "FHA - Streamline",
              "value": ""
            },
            {
              "name": "VA",
              "value": "6.0"
            },
            {
              "name": "VA IRRRL",
              "value": "6.0"
            },
            {
              "name": "Non-Prime",
              "value": ""
            }
          ]
        },
        {
          "name": "12",
          "programs": [
            {
              "name": "Conventional",
              "value": "3.5"
            },
            {
              "name": "FHA - Standard",
              "value": "5.0"
            },
            {
              "name": "FHA - Streamline",
              "value": ""
            },
            {
              "name": "VA",
              "value": "5.5"
            },
            {
              "name": "VA IRRRL",
              "value": "6.0"
            },
            {
              "name": "Non-Prime",
              "value": ""
            }
          ]
        },
        {
          "name": "13",
          "programs": [
            {
              "name": "Conventional",
              "value": ""
            },
            {
              "name": "FHA - Standard",
              "value": "5.0"
            },
            {
              "name": "FHA - Streamline",
              "value": ""
            },
            {
              "name": "VA",
              "value": ""
            },
            {
              "name": "VA IRRRL",
              "value": ""
            },
            {
              "name": "Non-Prime",
              "value": "2.0"
            }
          ]
        }
      ]
    }

型号:

代码语言:javascript
复制
    public class Program
    {
        public string name { get; set; }
        public string value { get; set; }
    }

    public class Investor
    {
        public string name { get; set; }
        public List<Program> programs { get; set; }
    }

    public class RootObject
    {
        public List<Investor> investors { get; set; }
    }
票数 2
EN

Stack Overflow用户

发布于 2014-05-10 01:57:49

使用Json.net,您只需执行以下操作:

代码语言:javascript
复制
Dictionary<string,object> result = JsonConvert.DeserializeObject<Dictionary<string,object>>(json);
foreach(var item in result)
    Console.WriteLine(item.Key + " " + item.Value);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8738031

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档