从JSON C#中获取部分对象列表



我在C#中调用一个RESTful服务,结果类似于:

{
  "blabla":1,
  "bbb":false,
  "blabla2":{
    "aaa":25,
    "bbb":25,
    "ccc":0
  },
  "I_want_child_list_from_this":{
     "total":15226,
     "max_score":1.0,
     "I_want_this":[
       {
        "A":"val1",
        "B":"val2",
        "C":"val3"
       },
       {
        "A":"val1",
        "B":"val2",
        "C":"val3"
       }
       ...
      ]
  "more_blabla": "fff"
  ... 
}

我想将"I_want_this"部分作为objectJObjectlist有类似的东西吗

(JObject)responseString["I_want_child_list_from_this"]["I_want_this"]

更一般地说:

(JObject)responseString["sub"]["sub_sub"]

我正在使用Newtonsoft.Json

谢谢!

首先,我将创建一个表示从服务调用返回的JSON结构的类。(http://json2csharp.com/从JSON自动生成类的伟大实用程序)

其次,如果您不使用Newtonsoft.Json库,我建议您使用该库。

最后,使用Newtonsoft将JSON从服务调用反序列化为您创建的类:

var json = Service.GetJson();
var yourDesiralizedJson = JsonConvert.DeserializeObject<YourJsonToCSharpClass>(json);
var listYouWant = yourDesiralizedJson.IWantChildList.IWantThis;

下面的链接似乎接近解决方案,因为请求者使用NewtonSoft.Json作为他的api来操作对象。感谢其他用户提供的解决方案。

例如,在这里查看newtonsoft.com/json/help/html/SerializationJSONFragments.htm

最好的解决方案(imo)是定义描述JSON模式的类,然后使用DeserializeObject,正如ertdiddy所建议的那样。作为一种快捷方式,您可以在模式定义不完整的情况下使用DeserializeAnonymousType,利用JSON的宽松性。在你的情况下,这个代码对我有效:

        var testDataFromQuestion = @"
{
  ""blabla"":1,
  ""bbb"":false,
  ""blabla2"":{
    ""aaa"":25,
    ""bbb"":25,
    ""ccc"":0
  },
  ""I_want_child_list_from_this"":{
     ""total"":15226,
     ""max_score"":1.0,
     ""I_want_this"":[
       {
        ""A"":""val1"",
        ""B"":""val2"",
        ""C"":""val3""
       },
       {
        ""A"":""val1"",
        ""B"":""val2"",
        ""C"":""val3""
       }
      ],
  ""more_blabla"": ""fff""
}";
        var anonymousDefinitionOfJson = new {
           I_want_child_list_from_this = new {
               I_want_this = new Dictionary<string, string>[] {}
           }
        };
        var fullDeserializationOfTestData =
           JsonConvert.DeserializeAnonymousType(testDataFromQuestion,
                                                anonymousDefinitionOfJson);
        var stuffYouWant = insterestingBits.I_want_child_list_from_this.I_want_this;
        Console.WriteLine($"The first thing I want is {stuffYouWant[0]["A"]}");

这将输出预期值"val1"。我匿名定义了能得到你想要的数据的最小类,然后我要求Newtonsoft解析足够的数据来填充这些类。

相关内容

  • 没有找到相关文章

最新更新