如何解决如何反序列化JSON数据树?
| 假设我的JSON数据格式为:(某种树数据:) { \“ nodeData \”: [ \“ nodeObject \”: { \“ nodeName \”:\“节点1 \”, \"nodeChildren\":
[
\"nodeObject\":
{
\"nodeName\": \"Node 1-1\"
},\"nodeObject\":
{
\"nodeName\": \"Node 1-2\"
},\"nodeObject\":
{
\"nodeName\": \"Node 1-3\",\"nodeChildren\":
[
\"nodeObject\":
{
\"nodeName\": \"Node 1-3-1\"
}
]
},\"nodeObject\":
{
\"nodeName\": \"Node 1-4\"
},\"nodeObject\":
{
\"nodeName\": \"Node 1-5\",}
]
},\"nodeObject\":
{
\"nodeName\": \"Node 2\",},\"nodeObject\":
{
\"nodeName\": \"Node 3\",}
]
}
为了反序列化此数据,在SL应用程序中,我定义了一个内部类来匹配JSON数据模型,例如:
[DataContract]
internal class nodeObject
{
[DataMember]
public string nodeName;
[DataMember]
public nodeObject nodeChildren;
}
然后使用DataContractJsonSerializer来获取数据,但是我得到了一些错误信息:
JSON中遇到意外字符。预期\',\',得到\':\'。 (37):
由于数据是一棵树,列表可能不适用于此类数据吗?
如何解决这个问题?
谢谢你们。如果json数据格式正确,那么我将使用以下类型的代码反序列化上述数据的对象:
var jsonSerializer = new DataContractJsonSerializer(typeof(List<nodeObject>));
var nodes = jsonSerializer.ReadObject(e.Result) as List<nodeObject>;
this.listBox1.ItemsSource = nodes;
但是对于节点,我仍然为空。
不知道如何用这种树数据来反序列化对象。
解决方法
您的json无效的javascript。您不能为数组元素定义键。例如,在代码的第一行中:
[
\"nodeObject\":
{ \"nodeName\":
//...
]
您的代码需要这样格式化:
[ {\"nodeName\": \"Node-1-1\"},{\"nodeName\": \"Node-1-2\"} /* ... */ ]
, 您的数据不是有效的JSON。我已经重新格式化了
{
\"nodeData\": [
\"nodeObject\",{
\"nodeName\": \"Node 1\",\"nodeChildren\": [
\"nodeObject\",{
\"nodeName\": \"Node 1-1\"
},\"nodeObject\",{
\"nodeName\": \"Node 1-2\"
},{
\"nodeName\": \"Node 1-3\",\"nodeChildren\": [
\"nodeObject\",{
\"nodeName\": \"Node 1-3-1\"
}
]
},{
\"nodeName\": \"Node 1-4\"
},{
\"nodeName\": \"Node 1-5\"
}
]
},{
\"nodeName\": \"Node 2\"
},{
\"nodeName\": \"Node 3\"
}
]
}
使用JSON Lint验证您的数据。
, 请注意,DataContractJsonSerializer仅支持以下编码:UTF-8,UTF-16LE和UTF-16BE。为此,您需要执行以下操作:
DataContractJsonSerializer json = new DataContractJsonSerializer(typeof(List<Client>));
System.IO.MemoryStream clientListStream = new System.IO.MemoryStream();
clientListStream.Write(System.Text.Encoding.UTF8.GetBytes(e.Result),e.Result.Length);
List<Client> Clients = json.ReadObject(clientListStream) as List<Client>;
dgMain.ItemsSource = Clients;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。