Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将JSON数组中的对象提取到列表_C#_Json_Json.net - Fatal编程技术网

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

我使用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<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确实如此,但有趣的是,我尝试了这个:它可以提取内部对象。