C# 将JSON数组中的对象提取到列表
我使用C代码工作,得到的JSON服务结果如下:C# 将JSON数组中的对象提取到列表,c#,json,json.net,C#,Json,Json.net,我使用C代码工作,得到的JSON服务结果如下: [ {"value":"{\"code\":\"MO\",\"description\":\"Monday\",\"isSet\":false}","nr":1} ,{"value":"{\"code\":\"TU\",\"description\":\"Tuesday\",\"isSet\":true}","nr":2} ] var test = JsonConvert.DeserializeObject<List<RootObje
[
{"value":"{\"code\":\"MO\",\"description\":\"Monday\",\"isSet\":false}","nr":1}
,{"value":"{\"code\":\"TU\",\"description\":\"Tuesday\",\"isSet\":true}","nr":2}
]
var test = JsonConvert.DeserializeObject<List<RootObject>>(json);
我想使用此数组中的反序列化值对象列表。但我的印象是我的代码有点麻烦
JArray j = JArray.Parse(task.Result);
List<Booking> b = j.Select(x => JObject.Parse(x["value"].ToString()).ToObject<Booking>()).ToList();
选择字符串并将其解析为对象,然后将其强制转换,这真的是一种方法吗?还是可以更有效地做到这一点 使用以下类别:
public class Value
{
public string Code { get; set; }
public string Description { get; set; }
public bool IsSet { get; set; }
}
public class RootObject
{
[JsonProperty("Booking")]
public Value Value { get; set; }
public int Nr { get; set; }
}
然后反序列化JSON字符串,如下所示:
[
{"value":"{\"code\":\"MO\",\"description\":\"Monday\",\"isSet\":false}","nr":1}
,{"value":"{\"code\":\"TU\",\"description\":\"Tuesday\",\"isSet\":true}","nr":2}
]
var test = JsonConvert.DeserializeObject<List<RootObject>>(json);
值的另一个问题是双引号。删除它们,反序列化工作正常
更新
如果不想操作JSON字符串,可以将其反序列化两次。为此,我对类进行了如下更改:
public class Value
{
public string Code { get; set; }
public string Description { get; set; }
public bool IsSet { get; set; }
}
public class RootObject
{
public string Value { get; set; }
public int Nr { get; set; }
}
public class ResultRootObject
{
public Value Value { get; set; }
public int Nr { get; set; }
}
然后我可以将其反序列化为ResultroToObject:
是的,那是我检查过的另一条路。但有几个问题。A.反序列化崩溃,因为value属性似乎不包含正确的对象,而是一个看起来像对象的字符串。我的价值对象不是命名的价值,而是预订。所以我想知道如何从价值到预订,而不是变得麻烦。是的。我还通过手动操作JSON发现了这一点。去掉那些额外的引用。但是,这也可以自动完成吗?例如,在反序列化器上有一些参数?@Tys正则表达式是我能想到的唯一方法。开始做这样的事情感觉有点奇怪。服务开发人员产生这样的结果的原因是什么?@Tys确实如此,但有趣的是,我尝试了这个:它可以提取内部对象。