C# UWP和嵌套json对象

C# UWP和嵌套json对象,c#,json,uwp,C#,Json,Uwp,我试图在c#应用程序中反序列化一些JSON代码。我使用DataContractJsonSerializer类来实现这一点。一切正常,直到我得到嵌套的JSONObject 我从外部API接收到以下json: [{"name":"Beeldscherm","json":"{\"onHomeEnter\":{\"state\":0,\"delay\":0,\"fadeTime\":0,\"active\":false,\"updatedAt\":1487166732440},\"onHomeExit\

我试图在c#应用程序中反序列化一些JSON代码。我使用DataContractJsonSerializer类来实现这一点。一切正常,直到我得到嵌套的JSONObject

我从外部API接收到以下json:

[{"name":"Beeldscherm","json":"{\"onHomeEnter\":{\"state\":0,\"delay\":0,\"fadeTime\":0,\"active\":false,\"updatedAt\":1487166732440},\"onHomeExit\":{\"state\":0,\"delay\":120,\"fadeTime\":0,\"active\":false,\"updatedAt\":1487163669388},\"onRoomEnter\":{\"state\":1,\"delay\":0,\"fadeTime\":0,\"active\":false,\"updatedAt\":1},\"onRoomExit\":{\"state\":0,\"delay\":120,\"fadeTime\":0,\"active\":false,\"updatedAt\":1},\"onNear\":{\"state\":1,\"delay\":0,\"fadeTime\":0,\"active\":false,\"updatedAt\":1487164911729},\"onAway\":{\"state\":0,\"delay\":2,\"fadeTime\":0,\"active\":false,\"updatedAt\":1487164909184}}","id":"58a44fa04f40b016004ffca2","sphereId":"58a44c0a4f40b016004ffc9d","createdAt":"2017-02-15T13:52:12.783Z","updatedAt":"2017-02-15T12:55:05.332Z"}]
我使用以下代码对其进行编辑:

responJsonText = responJsonText.Replace("\\", "").Replace("\"{", "{").Replace("}\"", "}");
然后看起来是这样的:

[{"name":"Beeldscherm","json":{"onHomeEnter":{"state":0,"delay":0,"fadeTime":0,"active":false,"updatedAt":1487166732440},"onHomeExit":{"state":0,"delay":120,"fadeTime":0,"active":false,"updatedAt":1487163669388},"onRoomEnter":{"state":1,"delay":0,"fadeTime":0,"active":false,"updatedAt":1},"onRoomExit":{"state":0,"delay":120,"fadeTime":0,"active":false,"updatedAt":1},"onNear":{"state":1,"delay":0,"fadeTime":0,"active":false,"updatedAt":1487164911729},"onAway":{"state":0,"delay":2,"fadeTime":0,"active":false,"updatedAt":1487164909184}},"id":"58a44fa04f40b016004ffca2","sphereId":"58a44c0a4f40b016004ffc9d","createdAt":"2017-02-15T13:52:12.783Z","updatedAt":"2017-02-15T12:55:05.332Z"}]
并尝试使用以下类来解析此内容:

[DataContract]
class Appliance
{
    [DataMember]
    public String name { get; set; }
    [DataMember]
    public ApplianceJson json { get; set; }
    [DataMember]
    public String id { get; set; }
    [DataMember]
    public String sphereId { get; set; }
    [DataMember]
    public String createdAt { get; set; }
    [DataMember]
    public String updatedAt { get; set; }
}

[DataContract]
class ApplianceJson
{
    [DataMember]
    public ApplianceEvents onHomeEnter { get; set; }
    [DataMember]
    public ApplianceEvents onHomeExit { get; set; }
    [DataMember]
    public ApplianceEvents onRoomEnter { get; set; }
    [DataMember]
    public ApplianceEvents onRoomExit { get; set; }
    [DataMember]
    public ApplianceEvents onNear { get; set; }
    [DataMember]
    public ApplianceEvents onAway { get; set; }
}

[DataContract]
class ApplianceEvents
{
    [DataMember]
    public int state { get; set; }
    [DataMember]
    public int delay { get; set; }
    [DataMember]
    public int fadeTime { get; set; }
    [DataMember]
    public bool active { get; set; }
    [DataMember]
    public int updatedAt { get; set; }
}
以及以下反序列化代码:

DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(List<Appliance>));
MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(responJsonText));
有人看到什么地方出了问题吗?我该如何解决

更新 我现在检查了json字符串及其正确性,我在问题中输入了正确的版本

更新2
添加了原始JSON

如果您注意到原始JSON,您可以看到
不是
\”
,但是如果深入研究JSON,JSON节点本身就有
作为
\”
。因此,我首先清理了所有的
\”
,然后又用
\“
替换了
。使用了Newtonsoft Json,然后它成功解析。请参阅我的答案

使用Site和JsonString,下面是我创建的正确的Json类结构

public class Appliance
{
    public string name { get; set; }
    public Json json { get; set; }
    public string id { get; set; }
    public string sphereId { get; set; }
    public string createdAt { get; set; }
    public string updatedAt { get; set; }
}

public class OnHomeEnter
{
    public int state { get; set; }
    public int delay { get; set; }
    public int fadeTime { get; set; }
    public bool active { get; set; }
    public long updatedAt { get; set; }
}

public class OnHomeExit
{
    public int state { get; set; }
    public int delay { get; set; }
    public int fadeTime { get; set; }
    public bool active { get; set; }
    public long updatedAt { get; set; }
}

public class OnRoomEnter
{
    public int state { get; set; }
    public int delay { get; set; }
    public int fadeTime { get; set; }
    public bool active { get; set; }
    public int updatedAt { get; set; }
}

public class OnRoomExit
{
    public int state { get; set; }
    public int delay { get; set; }
    public int fadeTime { get; set; }
    public bool active { get; set; }
    public int updatedAt { get; set; }
}

public class OnNear
{
    public int state { get; set; }
    public int delay { get; set; }
    public int fadeTime { get; set; }
    public bool active { get; set; }
    public long updatedAt { get; set; }
}

public class OnAway
{
    public int state { get; set; }
    public int delay { get; set; }
    public int fadeTime { get; set; }
    public bool active { get; set; }
    public long updatedAt { get; set; }
}

public class Json
{
    public OnHomeEnter onHomeEnter { get; set; }
    public OnHomeExit onHomeExit { get; set; }
    public OnRoomEnter onRoomEnter { get; set; }
    public OnRoomExit onRoomExit { get; set; }
    public OnNear onNear { get; set; }
    public OnAway onAway { get; set; }
}
完成后,我将JsonString解析为
Appliance
对象

下面是最终的Json字符串和解析器

"[{\"name\":\"Beeldscherm\",\"json\":{\"onHomeEnter\":{\"state\":0,\"delay\":0,\"fadeTime\":0,\"active\":false,\"updatedAt\":1487166732440},\"onHomeExit\":{\"state\":0,\"delay\":120,\"fadeTime\":0,\"active\":false,\"updatedAt\":1487163669388},\"onRoomEnter\":{\"state\":1,\"delay\":0,\"fadeTime\":0,\"active\":false,\"updatedAt\":1},\"onRoomExit\":{\"state\":0,\"delay\":120,\"fadeTime\":0,\"active\":false,\"updatedAt\":1},\"onNear\":{\"state\":1,\"delay\":0,\"fadeTime\":0,\"active\":false,\"updatedAt\":1487164911729},\"onAway\":{\"state\":0,\"delay\":2,\"fadeTime\":0,\"active\":false,\"updatedAt\":1487164909184}},\"id\":\"58a44fa04f40b016004ffca2\",\"sphereId\":\"58a44c0a4f40b016004ffc9d\",\"createdAt\":\"2017 - 02 - 15T13: 52:12.783Z\",\"updatedAt\":\"2017 - 02 - 15T12: 55:05.332Z\"}]";
下面是我如何成功解析Json的

List<Appliance> appJson = JsonConvert.DeserializeObject<List<Appliance>>(JsonData);
List-appJson=JsonConvert.DeserializeObject(JsonData);

祝您好运。

您的Json没有解析。请尝试联机Json解析器,看看您是否收到了正确的Json。您应该查看是否存在包含更多详细信息的内部异常。@AVKNaidu Json确实有问题,这是因为返回Json的API将Json对象中的Json元素以字符串形式返回nd我只删除了对象周围的“\而不是”,但它仍然不起作用。你能发布你收到的实际json吗?在你们剥离任何东西之前?若你们打开BreakonException,那个可能会有所帮助。您也可以尝试/捕获并添加一些日志记录。我在发布答案之前找到了答案,它不仅是\“(我已经删除了),而且是围绕json块的”。在用{替换{和}后,它工作了。但是谢谢你的调查。
List<Appliance> appJson = JsonConvert.DeserializeObject<List<Appliance>>(JsonData);