2013-07-10 63 views
0

我似乎有问题,反序列化这个XML:deserialise嵌套的XML

<Parameters> 
    <AParameters>   
    </AParameters> 
    <BParameters>  
    </BParameters> 
</Parameters> 

成AParameters和BParameters水合不正确。在这种嵌套的情况下,我有什么需要考虑的吗?

+0

你不应该让类为Serializable?还有什么是你面临的问题,任何异常或错误? – srsyogesh

回答

1

当您使用JsonConvert.SerializeXmlNode(doc)你的XML文档转换成JSON字符串,则生成看起来像这样JSON:

{ 
    "?xml": 
    { 
     "@version":"1.0" 
    }, 
    "Parameters": 
    { 
     "AParameters": 
     { 
      ... 
     }, 
     "BParameters": 
     { 
      ... 
     } 
    } 
} 

注意,Parameters数据不是在根,但外内目的。因此,当您尝试将JSON直接反序列化到Parameters类时,没有一个属性排队,因为它们都进一步向下。由于JSON.Net无法将类中的字段名称与JSON数据进行匹配,因此它只使用默认值。

要解决这个问题,你可以做两件事之一。

1)修复您的XML到JSON转换,以便Parameters数据位于根目录。为了使它工作,JSON数据需要如下所示(下图)。说起来容易做起来难。

{ 
    "AParameters": 
    { 
     ... 
    }, 
    "BParameters": 
    { 
     ... 
    } 
} 

2)创建一个包装类并反序列化到那个。这很容易。例如:

class Wrapper 
{ 
    public Parameters Parameters { get; set; } 
} 

然后反序列化这样的:

Parameters p = JsonConvert.DeserializeObject<Wrapper>(jsonString).Parameters; 
+0

谢谢。是的,我认为是这样。 '包装'的方法完美。谢谢! – cs0815