C# 使用Json.NET反序列化

C# 使用Json.NET反序列化,c#,json.net,C#,Json.net,以下是API的响应: {"success":true,"data":[{"_id":"559276d1f21a16dc28f8cd67","name":"Businessman","__v":0}]} 所有服务器方法都以以下格式返回Json对象: { "success": "true/false", data: "object_array[]" } 或: 因此,我应该为响应提供一个C#对象,并且我还需要为响应的“数据”部分提供不同的对象类型。“数据”属性将是不同类型的数组,有时是单个对象 是

以下是API的响应:

{"success":true,"data":[{"_id":"559276d1f21a16dc28f8cd67","name":"Businessman","__v":0}]}
所有服务器方法都以以下格式返回Json对象:

{ "success": "true/false", data: "object_array[]" }
或:

因此,我应该为响应提供一个C#对象,并且我还需要为响应的“数据”部分提供不同的对象类型。“数据”属性将是不同类型的数组,有时是单个对象

是否有一种动态的方法来处理这个场景,或者我应该为每个响应定义不同的类型


谢谢。

您可以使用
dynamic
关键字

dynamic jObj = JObject.Parse(json);
Console.WriteLine(jObj.success);

if(jObj.data is JArray)
{
    Console.WriteLine(jObj.data[0].name);
}

if (jObj.data is JObject)
{
    Console.WriteLine(jObj.data.name);
}

那取决于你想要什么。您可以反序列化到动态对象,但这样就不会得到任何设计时属性检查或intellisense。我个人会为每个人创建对象。
dynamic jObj = JObject.Parse(json);
Console.WriteLine(jObj.success);

if(jObj.data is JArray)
{
    Console.WriteLine(jObj.data[0].name);
}

if (jObj.data is JObject)
{
    Console.WriteLine(jObj.data.name);
}