C# 反序列化动态JSON对象

C# 反序列化动态JSON对象,c#,.net,json,asp.net-core,deserialization,C#,.net,Json,Asp.net Core,Deserialization,我使用的是第三方API,我收到的Json响应如下。 通常,使用 Newtonsoft.Json.JsonConvert.DeserializeObject<MyModel>(response); 现在,让我感到困惑的是,数字(1,2,3,4,5)是标识符,因此不会保持不变,每次收到响应时都可能发生变化。我认为Newtonsoft可以为您做到这一点 string json = @"{ 'Email': 'james@example.com', 'Active': t

我使用的是第三方API,我收到的Json响应如下。 通常,使用

Newtonsoft.Json.JsonConvert.DeserializeObject<MyModel>(response);

现在,让我感到困惑的是,数字(1,2,3,4,5)是标识符,因此不会保持不变,每次收到响应时都可能发生变化。

我认为Newtonsoft可以为您做到这一点

string json = @"{
  'Email': 'james@example.com',
  'Active': true,
  'CreatedDate': '2013-01-20T00:00:00Z',
  'Roles': [
    'User',
    'Admin'
  ]
}";

var jsonReturn = Newtonsoft.Json.JsonConvert.DeserializeObject<dynamic>( json );
Console.WriteLine( jsonReturn.Email );
stringjson=@”{
“电子邮件”:james@example.com',
“活动”:正确,
“CreatedDate”:“2013-01-20T00:00:00Z”,
“角色”:[
“用户”,
“管理员”
]
}";
var jsonReturn=Newtonsoft.Json.JsonConvert.DeserializeObject(Json);
Console.WriteLine(jsonReturn.Email);
基于此链接:


这是最基本的解释。使用foreach在de节点上迭代

使用@Liam对JObject的建议我已经想出了这个工作解决方案

public class MyObject
{
        public int id { get; set; }
        public int qty { get; set; }
        public string discount { get; set; }
        public decimal price { get; set; }
}
然后在检索JSON响应之后

        var jsonObj = JsonConvert.DeserializeObject<JObject>(response);

        List<MyObject> myObjects = new List<MyObject>();

        foreach (var item in jsonObj.AsJEnumerable())
        {
                var csp = JsonConvert.DeserializeObject<List<MyObject>>(item.First.ToString());

                csp.ForEach(a => { a.product_id = Convert.ToInt32(item.Path); });
                    
                myObjects.AddRange(csp);
         }
var jsonObj=JsonConvert.DeserializeObject(响应);
List myObjects=new List();
foreach(jsonObj.AsJEnumerable()中的var项)
{
var csp=JsonConvert.DeserializeObject(item.First.ToString());
csp.ForEach(a=>{a.product_id=Convert.ToInt32(item.Path);});
myObjects.AddRange(csp);
}

尝试将JSON粘贴到此工具中,以帮助您构建模式类。字典怎么样?(其中MyClass是数量、折扣、价格)(或者可能是字典,因为尽管每个索引只有一个对象,但它似乎是一个数组)。@KieranDevlin它生成垃圾(class1、class2、class3等),您必须为该JSON使用和/或自定义序列化器。我建议您的根本原因是生成JSON的原因。我假设它应该是一个数组,但它看起来像是将数组索引解析为一个属性,修复这里的解析不是
MyModel
看起来如何?看起来,
字典
(值应该是一个数组)将对您有所帮助
        var jsonObj = JsonConvert.DeserializeObject<JObject>(response);

        List<MyObject> myObjects = new List<MyObject>();

        foreach (var item in jsonObj.AsJEnumerable())
        {
                var csp = JsonConvert.DeserializeObject<List<MyObject>>(item.First.ToString());

                csp.ForEach(a => { a.product_id = Convert.ToInt32(item.Path); });
                    
                myObjects.AddRange(csp);
         }