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

C# 从JSON C获取部分对象列表#,c#,json,rest,json.net,C#,Json,Rest,Json.net,我在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",

我在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"
  ... 
}
我想将“我想要这个”部分作为
对象的
列表
作业对象
有类似的吗

(JObject)responseString["I_want_child_list_from_this"]["I_want_this"]
更一般地说:

(JObject)responseString["sub"]["sub_sub"]
我使用的是
Newtonsoft.Json


谢谢

首先,我将创建一个表示服务调用返回的JSON结构的类。(用于从JSON自动生成类的强大实用程序)

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

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

var json = Service.GetJson();
var yourDesiralizedJson = JsonConvert.DeserializeObject<YourJsonToCSharpClass>(json);
var listYouWant = yourDesiralizedJson.IWantChildList.IWantThis;
var json=Service.GetJson();
var yourDesiralizedJson=JsonConvert.DeserializeObject(json);
var listYouWant=yourDesiredJSON.IWantChildList.IWantThis;
最佳解决方案(imo)是定义描述JSON模式的类,然后使用Ertdidy建议的
反序列化对象。作为一种快捷方式,您可以使用
反序列化匿名类型
处理模式的不完整定义,利用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"]}");
var testDataFromQuestion=@”
{
“布拉布拉”:1,
“bbb”:错,
“废话2”:{
“aaa”:25,
“bbb”:25,
“ccc”:0
},
“我想要这个”的孩子名单:{
“总数”:15226,
“最高分数”:1.0,
“我想要这个”[
{
“A”:“val1”,
“B”:“val2”,
“C”:“val3”
},
{
“A”:“val1”,
“B”:“val2”,
“C”:“val3”
}
],
“更多信息:”fff“
}";
var anonymousDefinitionOfJson=new{
我想从这个=新的{
我想要这本=新字典[]{}
}
};
测试数据的var完全反序列化=
JsonConvert.DeserializeAnonymousType(testDataFromQuestion,
匿名定义(JSON);
var stuffYouWant=insterestingBits.I\u want\u child\u list\u from\u this.I\u want\u this;
WriteLine($“我想要的第一件事是{stuffYouWant[0][“A”]}”);

这将输出预期值“val1”。我以匿名方式定义仅获取所需数据的最小类,然后我要求Newtonsoft解析足以填充这些类的内容。

以下链接似乎与解决方案非常接近,因为请求者使用Newtonsoft.Json作为其api来操作对象。同时,也感谢其他用户提供的解决方案


查看示例:此处newtonsoft.com/json/help/html/SerializingJSONFragments.htm

您正在使用哪个json解析器?newtonsoft?是的,使用
newtonsoft.json
查看示例:此处感谢@Gomes您的评论使我更接近我当前的解决方案。您可以回答,我接受。谢谢!@DDan按照您的要求完成,如果可以,我很高兴is解决了您的问题:)谢谢,这看起来很理想,但是我没有一个结果类型的通用结构,这就是为什么我希望
object
s或
JObject
sCan您可以在这里总结信息吗?仅链接的答案很容易被破坏,有时甚至会被标记和删除。