Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/326.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.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_Serialization - Fatal编程技术网

C#反序列化根JSON未知密钥

C#反序列化根JSON未知密钥,c#,json,serialization,C#,Json,Serialization,我有这样一个JSON,必须反序列化它: { "0": { "foo_id":"xyz", "bar_id":"abc", "book": { "0": { "title":"hello", "author":"person_x" }, "1": { "title":"hi", "author":"person_y" } }, "1": { "

我有这样一个JSON,必须反序列化它:

{
  "0": {
    "foo_id":"xyz",
    "bar_id":"abc",
    "book": {
      "0": {
        "title":"hello",
        "author":"person_x"
      },
      "1": {
        "title":"hi",
        "author":"person_y"
      }
  },
  "1": {
    "foo_id":"xyz",
    "bar_id":"abc",
    "book": {
      "0": {
        "title":"hello",
        "author":"person_a"
      },
      "1": {
        "title":"bye",
        "author":"person_b"
      }
  },
  "random":"string",
  "other":"thing"
}
和这个问题类似,只是给出的答案不起作用,因为我没有创建这样一个类的奢侈

public class RootObject
{
    public Dictionary<string, Object> Objects {get; set;}
}
公共类根对象
{
公共字典对象{get;set;}
}
如果我这样做,则反序列化后对象字段为空

根对象和书本对象都是动态的


任何其他方法都将不胜感激,请提前感谢。

因为您的JSON不包含
RootObject
,而包含一个字典,您可以直接反序列化到
字典中,如下所示:

类别:

public class Item
{
    [JsonProperty("foo_id")]
    public string FooId { get; set; }

    [JsonProperty("bar_id")]
    public string BarId { get; set; }
}
var result = JsonConvert.DeserializeObject<Dictionary<string, Item>>(json);
public class RootObject
{
    [JsonExtensionData]
    public Dictionary<string, JToken> Items { get; set; }

    [JsonProperty("random")]
    public string Random { get; set; }

    [JsonProperty("other")]
    public string Other { get; set; }
}
var result = JsonConvert.DeserializeObject<RootObject>(json);
反序列化:

public class Item
{
    [JsonProperty("foo_id")]
    public string FooId { get; set; }

    [JsonProperty("bar_id")]
    public string BarId { get; set; }
}
var result = JsonConvert.DeserializeObject<Dictionary<string, Item>>(json);
public class RootObject
{
    [JsonExtensionData]
    public Dictionary<string, JToken> Items { get; set; }

    [JsonProperty("random")]
    public string Random { get; set; }

    [JsonProperty("other")]
    public string Other { get; set; }
}
var result = JsonConvert.DeserializeObject<RootObject>(json);
var result=JsonConvert.DeserializeObject(json);
结果:

public class Item
{
    [JsonProperty("foo_id")]
    public string FooId { get; set; }

    [JsonProperty("bar_id")]
    public string BarId { get; set; }
}
var result = JsonConvert.DeserializeObject<Dictionary<string, Item>>(json);
public class RootObject
{
    [JsonExtensionData]
    public Dictionary<string, JToken> Items { get; set; }

    [JsonProperty("random")]
    public string Random { get; set; }

    [JsonProperty("other")]
    public string Other { get; set; }
}
var result = JsonConvert.DeserializeObject<RootObject>(json);


更新: 由于您已经更改了问题中的原始JSON,第二个给定JSON可以反序列化如下:

类别:

public class Item
{
    [JsonProperty("foo_id")]
    public string FooId { get; set; }

    [JsonProperty("bar_id")]
    public string BarId { get; set; }
}
var result = JsonConvert.DeserializeObject<Dictionary<string, Item>>(json);
public class RootObject
{
    [JsonExtensionData]
    public Dictionary<string, JToken> Items { get; set; }

    [JsonProperty("random")]
    public string Random { get; set; }

    [JsonProperty("other")]
    public string Other { get; set; }
}
var result = JsonConvert.DeserializeObject<RootObject>(json);
公共类根对象
{
[JsonExtensionData]
公共字典项{get;set;}
[JsonProperty(“随机”)]
公共字符串随机{get;set;}
[JsonProperty(“其他”)]
公共字符串其他{get;set;}
}
反序列化:

public class Item
{
    [JsonProperty("foo_id")]
    public string FooId { get; set; }

    [JsonProperty("bar_id")]
    public string BarId { get; set; }
}
var result = JsonConvert.DeserializeObject<Dictionary<string, Item>>(json);
public class RootObject
{
    [JsonExtensionData]
    public Dictionary<string, JToken> Items { get; set; }

    [JsonProperty("random")]
    public string Random { get; set; }

    [JsonProperty("other")]
    public string Other { get; set; }
}
var result = JsonConvert.DeserializeObject<RootObject>(json);
var result=JsonConvert.DeserializeObject(json);

因为您拥有的JSON不包含
RootObject
,而包含一个字典,所以您可以直接反序列化到
字典中,如下所示:

类别:

public class Item
{
    [JsonProperty("foo_id")]
    public string FooId { get; set; }

    [JsonProperty("bar_id")]
    public string BarId { get; set; }
}
var result = JsonConvert.DeserializeObject<Dictionary<string, Item>>(json);
public class RootObject
{
    [JsonExtensionData]
    public Dictionary<string, JToken> Items { get; set; }

    [JsonProperty("random")]
    public string Random { get; set; }

    [JsonProperty("other")]
    public string Other { get; set; }
}
var result = JsonConvert.DeserializeObject<RootObject>(json);
反序列化:

public class Item
{
    [JsonProperty("foo_id")]
    public string FooId { get; set; }

    [JsonProperty("bar_id")]
    public string BarId { get; set; }
}
var result = JsonConvert.DeserializeObject<Dictionary<string, Item>>(json);
public class RootObject
{
    [JsonExtensionData]
    public Dictionary<string, JToken> Items { get; set; }

    [JsonProperty("random")]
    public string Random { get; set; }

    [JsonProperty("other")]
    public string Other { get; set; }
}
var result = JsonConvert.DeserializeObject<RootObject>(json);
var result=JsonConvert.DeserializeObject(json);
结果:

public class Item
{
    [JsonProperty("foo_id")]
    public string FooId { get; set; }

    [JsonProperty("bar_id")]
    public string BarId { get; set; }
}
var result = JsonConvert.DeserializeObject<Dictionary<string, Item>>(json);
public class RootObject
{
    [JsonExtensionData]
    public Dictionary<string, JToken> Items { get; set; }

    [JsonProperty("random")]
    public string Random { get; set; }

    [JsonProperty("other")]
    public string Other { get; set; }
}
var result = JsonConvert.DeserializeObject<RootObject>(json);


更新: 由于您已经更改了问题中的原始JSON,第二个给定JSON可以反序列化如下:

类别:

public class Item
{
    [JsonProperty("foo_id")]
    public string FooId { get; set; }

    [JsonProperty("bar_id")]
    public string BarId { get; set; }
}
var result = JsonConvert.DeserializeObject<Dictionary<string, Item>>(json);
public class RootObject
{
    [JsonExtensionData]
    public Dictionary<string, JToken> Items { get; set; }

    [JsonProperty("random")]
    public string Random { get; set; }

    [JsonProperty("other")]
    public string Other { get; set; }
}
var result = JsonConvert.DeserializeObject<RootObject>(json);
公共类根对象
{
[JsonExtensionData]
公共字典项{get;set;}
[JsonProperty(“随机”)]
公共字符串随机{get;set;}
[JsonProperty(“其他”)]
公共字符串其他{get;set;}
}
反序列化:

public class Item
{
    [JsonProperty("foo_id")]
    public string FooId { get; set; }

    [JsonProperty("bar_id")]
    public string BarId { get; set; }
}
var result = JsonConvert.DeserializeObject<Dictionary<string, Item>>(json);
public class RootObject
{
    [JsonExtensionData]
    public Dictionary<string, JToken> Items { get; set; }

    [JsonProperty("random")]
    public string Random { get; set; }

    [JsonProperty("other")]
    public string Other { get; set; }
}
var result = JsonConvert.DeserializeObject<RootObject>(json);
var result=JsonConvert.DeserializeObject(json);

我仍然有一个RootObject类,我想反序列化它,因为它还有一些我需要的其他数据。Thanks@querty123了解完整JSON响应的整个结构对于反序列化非常重要,因为我仍然有一个RootObject类,这是我想要反序列化的,因为它还有一些我需要的其他数据。Thanks@querty123为了反序列化,了解完整JSON响应的整个结构非常重要