Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.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在对象中返回null_C#_Json_Json.net - Fatal编程技术网

C# 解析嵌套json在对象中返回null

C# 解析嵌套json在对象中返回null,c#,json,json.net,C#,Json,Json.net,我有以下json { "room1": { "first": "id1", "second": "id2", "third": "id3" }, "room2": { "first": "id1", "second": "id2", "third": "id3" } } 我正试图反序列化这两个类 public class Streams { [

我有以下json

{
    "room1": {
        "first": "id1",
        "second": "id2",
        "third": "id3"
    },
    "room2": {
        "first": "id1",
        "second": "id2",
        "third": "id3"
    }
}
我正试图反序列化这两个类

public class Streams
    {
        [JsonProperty("first")]
        public string first { get; set; }

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

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

    public class Room
    {
            public string room { get; set; }
            public Streams streams { get; set; }
    }
我当前的代码很简单:

Rooms r = JsonConvert.DeserializeObject<Rooms>(jsonstring);
]

公共教室
{
公共流room1{get;set;}
公共流room2{get;set;}
}
Rooms r=JsonConvert.DeserializeObject(jsonstring);

您的类对于此对象是错误的

public class JsonClass
{
    public RoomClass room1 {get; set;}
    public RoomClass room2 {get; set;}
}

public class RoomClass
{
    [JsonProperty("first")]
    public string first { get; set; }

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

    [JsonProperty("third")]
    public string third { get; set; }
}
然后

var result=JsonConvert.DeserializeObject(jsonstring);
编辑:OP表示将有许多房间

var result = JsonConvert.DeserializeObject<IDictionary<string, RoomClass>>(jsonstring);
var result=JsonConvert.DeserializeObject(jsonstring);

您是否能够更改json<代码>{“name”:“room1”,“streams”:{“first”…}将更容易解析等。处理名称(而不是值)更改的属性总是很麻烦,如果您能够在开发的这个阶段更改数据结构,从长远来看可能会使事情变得更容易如果您的(json)对象可以包含任意数量的
n
房间,那么通过在该对象中定义
n
不同字段,您就是在自取灭亡。您只需将它们包含在列表中并相应地反序列化即可。如果不是这样,那么用相应的字段名定义一个c#类,并相应地反序列化它。@JamesThorpe是的,我可以更改json。您能告诉我如何更改您提供的示例json的类吗?@Jota.Toledo这是n个任意房间,但我可以更改json。但这只是一个示例json。房间1和房间2将会有更多的房间。也许JsonClass可以有公共列表?我还需要能够记住字符串中的键。那么JsonClass中有什么呢?还是单独的1号和2号房间吗?我试图避免这一点,理想情况下,您不需要使用JSONCARCH,请考虑为OP的问题包含应用解决方案的描述。
public class Rooms
{
        public Streams room1{ get; set; }
        public Streams room2{ get; set; }
}
Rooms r = JsonConvert.DeserializeObject<Rooms>(jsonstring);
public class JsonClass
{
    public RoomClass room1 {get; set;}
    public RoomClass room2 {get; set;}
}

public class RoomClass
{
    [JsonProperty("first")]
    public string first { get; set; }

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

    [JsonProperty("third")]
    public string third { get; set; }
}
var result = JsonConvert.DeserializeObject<JsonClass>(jsonstring);
var result = JsonConvert.DeserializeObject<IDictionary<string, RoomClass>>(jsonstring);