如何反序列化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\"
                },
                \"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\"
        }
    ]
}
使用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), 0, e.Result.Length);

                List<Client> Clients = json.ReadObject(clientListStream) as List<Client>;
                dgMain.ItemsSource = Clients;
    

要回复问题请先登录注册