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