C# JsonReader如何处理单个项与数组

C# JsonReader如何处理单个项与数组,c#,json.net,C#,Json.net,我正在使用JSON.NET解析从webservice收到的响应。 问题是响应可能包含单个项或多个项(数组),这将导致响应字符串略有不同 单项答复: { "row": "1", "name": "John" } [ { "row": "1", "name": "John" }, { "row": "2", "name": "Doe" }, ] 多项目响应: { "row":

我正在使用JSON.NET解析从webservice收到的响应。 问题是响应可能包含单个项或多个项(数组),这将导致响应字符串略有不同

单项答复:

{
    "row": "1",
    "name": "John"
}
[
    {
        "row": "1",
        "name": "John"
    },
    {
        "row": "2",
        "name": "Doe"
    },
]
多项目响应:

{
    "row": "1",
    "name": "John"
}
[
    {
        "row": "1",
        "name": "John"
    },
    {
        "row": "2",
        "name": "Doe"
    },
]
我使用下面的代码来解析

 List<MyClass> wsRetrieveDataResponse = JsonReadSerializer.Deserialize<List<MyClass>>(reader);
JsonReadSerializer的构造函数

JsonReadSerializer = new JsonSerializer()
{
    MissingMemberHandling = JSON_ENFORCE_MISSING ? MissingMemberHandling.Error : MissingMemberHandling.Ignore,
    NullValueHandling = JSON_NULL_IGNORE ? NullValueHandling.Ignore : NullValueHandling.Include
 };
[编辑#2]:我的回答是使用type
JsonTextReader

// Get the response.  
...
WebResponse response = webRequest.GetResponse();
dataStream = response.GetResponseStream();
StreamReader reader = new StreamReader(dataStream);

return new JsonTextReader(reader);

你可以用这种东西:

var token = JToken.Parse(content);

if (token is JArray)
{
    IEnumerable<MyClass> response= token.ToObject<List<MyClass>>();
}
else if (token is JObject)
{
    MyClass myClass= token.ToObject<MyClass>();
}
var-token=JToken.Parse(内容);
if(标记为JArray)
{
IEnumerable response=token.ToObject();
}
else if(标记为JObject)
{
MyClass MyClass=token.ToObject();
}

您可以使用
Newtonsoft.json.Linq提供的
JTokenType
enum检查json的类型

首先,尝试使用
JsonTextReader
加载
JToken
。加载
JToken
提供的方法,然后检查解析的
JToken
是否为
数组或
对象

然后
JToken.ToObject
cast或将
JToken
映射到您想要的指定类型

JToken jToken = JToken.Load(reader);

if (jToken.Type == JTokenType.Array)
{
    List<MyClass> wsRetrieveDataResponse = jToken.ToObject<List<MyClass>>();
}
else if (jToken.Type == JTokenType.Object)
{
    MyClass wsRetrieveDataResponse = jToken.ToObject<MyClass>();
}
JToken JToken=JToken.Load(读卡器);
if(jToken.Type==JTokenType.Array)
{
列出wsRetrieveDataResponse=jToken.ToObject();
}
else if(jToken.Type==JTokenType.Object)
{
MyClass wsRetrieveDataResponse=jToken.ToObject();
}

你能展示一下
JsonReadSerializer
你的
反序列化
方法实际上做了什么吗?在上面添加了,同时展示一下
JsonReadSerializer
内的
反序列化
方法吗?我没有。这是一个JSON.NET函数。看起来像的副本,同意吗?顺便说一下,我的响应存储在
JsonTextReader
中。我在
字符串中没有它。如何从
JsonTextReader
转换为jsonString?