C# 如何从API(数组数组)反序列化此JSON字符串

C# 如何从API(数组数组)反序列化此JSON字符串,c#,C#,假设序列化的变量来自API,并且我没有RsTarget类作为API的客户机 我想我可以将它反序列化为一个动态对象,这样就可以访问属性了。然而,在理解如何做到这一点上有点困难。它是一个数组数组。我找到了如何反序列化顶级数组,但元素是JSON字符串 假设我想访问Target3属性 我看错了吗?我应该在客户端上复制RsTarget吗?如果API更改了RsTarget怎么办 using Newtonsoft.Json; using Newtonsoft.Json.Linq; using System.C

假设
序列化的
变量来自API,并且我没有RsTarget类作为API的客户机

我想我可以将它反序列化为一个动态对象,这样就可以访问属性了。然而,在理解如何做到这一点上有点困难。它是一个数组数组。我找到了如何反序列化顶级数组,但元素是JSON字符串

假设我想访问Target3属性

我看错了吗?我应该在客户端上复制RsTarget吗?如果API更改了RsTarget怎么办

using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System.Collections.Generic;

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            List<List<RsTarget>> toReturn = new List<List<RsTarget>>();

            List<RsTarget> list = new List<RsTarget>();
            list.Add(new RsTarget() { Id = 1, MyProperty = "Target1" });

            List<RsTarget> list2 = new List<RsTarget>();
            list2.Add(new RsTarget() { Id = 2, MyProperty = "Target2" });
            list2.Add(new RsTarget() { Id = 3, MyProperty = "Target3" });

            toReturn.Add(list);
            toReturn.Add(list2);

            var serialized = JsonConvert.SerializeObject(toReturn);

            var deserialized = JsonConvert.DeserializeObject<JArray>(serialized).ToObject<List<List<JObject>>>();
        }
    }

    class RsTarget
    {
        public int Id { get; set; }
        public string MyProperty { get; set; }
    }
}
使用Newtonsoft.Json;
使用Newtonsoft.Json.Linq;
使用System.Collections.Generic;
名称空间控制台EAPP1
{
班级计划
{
静态void Main(字符串[]参数)
{
List toReturn=新列表();
列表=新列表();
添加(新的RsTarget(){Id=1,MyProperty=“Target1”});
List list2=新列表();
添加(新的RsTarget(){Id=2,MyProperty=“Target2”});
添加(新的RsTarget(){Id=3,MyProperty=“Target3”});
返回。添加(列表);
toReturn.Add(列表2);
var serialized=JsonConvert.serialized对象(toReturn);
var deserialized=JsonConvert.DeserializeObject(序列化).ToObject();
}
}
类RsTarget
{
公共int Id{get;set;}
公共字符串MyProperty{get;set;}
}
}

当你得到
JArray

var arr = JsonConvert.DeserializeObject<JArray>(serialized);
for(var i = 0;i < arr.Count; i++)
{
    JArray arr2 = arr[i] as JArray;

    for(var j = 0;j < arr2.Count; j++)
    {
        JObject obj = arr2[j] as JObject;
        // using dynamic 
        dynamic dobj = obj;
        var Id = (int)doObj.Id;
       // using strong type
       var strongObj = obj.ToObject<MyClientClass>()
    }
}
var arr=JsonConvert.DeserializeObject(序列化);
对于(变量i=0;i

我应该在客户端上复制RsTarget吗?如果API更改了RsTarget怎么办


在客户端上复制RsTarget的最佳方法。关于第二个问题:即使你使用了
JObject
,当api更改属性名称时,它总是会破坏你的应用程序,但是如果只添加一个属性,它们都不会生效。

我忘了你的json是一个数组的数组,无论如何你应该了解JObject和JArray是如何工作的