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是如何工作的