我试图反序列化c#applicatie中的一些JSON代码。我使用DataContractJsonSerializer类来执行此操作。一切工作正常,直到我得到的嵌套一个JSONObjects,UWP和嵌套的json对象
我收到以下JSON从外部API:
[{"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));
我得到的错误是:
Exception thrown: 'System.Runtime.Serialization.SerializationException' in System.Private.DataContractSerialization.dll
Exception thrown: 'System.Runtime.Serialization.SerializationException' in mscorlib.ni.dll
是否有人看到的东西,是错误的,我怎么能解决这个问题?
更新 我检查JSON字符串和其正确的,现在,我已经把这个问题的正确版本
更新2 加入原JSON
你的Json不解析。尝试在线Json解析器,看看你是否收到适当的Json。 – AVK
你应该看看是否有内部异常有更多的细节。 – crashmstr
@AVKNaidu那里确实有json的错误,这是因为给了JSON的API将字符串中json对象的json元素转换为字符串,而我只删除了\,而不是“围绕该对象,但它仍然没有没有工作。 – furrie