【发布时间】:2018-04-11 18:31:35
【问题描述】:
此问题源自另一个主题,可在以下位置找到: Extract objects from JSON array to list
问题是我收到了以下 JSON 响应,而我的 JSON.NET 反序列化器不理解它,但是像 https://jsonlint.com 这样的其他几个 JSON 验证器说它是有效的。
[
{"value":"{\"code\":\"MO\",\"description\":\"Monday\",\"isSet\":false}","nr":1}
,{"value":"{\"code\":\"TU\",\"description\":\"Tuesday\",\"isSet\":true}","nr":2}
]
在我看来,这里的问题是值对象看起来像一个 JSON 对象,但实际上是一个字符串。 JsonConvert.DeserializeObject 一直抛出错误,直到我删除额外的引号 (") 和转义字符。
所以问题是,为什么这个响应格式是这样的?以及如何告诉反序列化器如何使用它?我确信删除或替换字符不是要走的路。
这是我正在做的:
public class Value
{
public string code { get; set; }
public string description { get; set; }
public bool isSet { get; set; }
}
public class RootObject
{
public Value value { get; set; }
public int nr { get; set; }
}
var json = JsonConvert.DeserializeObject<List<RootObject>>(serviceResult);
以上行不通。
目前我已经通过这种方式解决了这个问题。但我一直认为,上面的解串器更优雅。
JArray jArray = JArray.Parse(serviceResult);
List<Value> values = jArray.Select(x => JObject.Parse(x["value"].ToString()).ToObject<Value>()).ToList();
【问题讨论】:
-
能贴出反序列化代码吗?
-
喜欢它是嵌套的。这些值本身是 json 样式的属性,并且使用转义引号对其进行编码以符合字符串的要求。
-
对我来说看起来像是有效的 JSON,你想将它反序列化成什么?您链接的问题不正确。
-
我已经添加了我当前的代码。
-
@DavidG 为什么这个问题不正确?