我有一段XML看起来像

<person xmlns:json='http://james.newtonking.com/projects/json' id='1'>
   <name>Alan</name>
   <url>http://www.google.com</url>
   <role json:Array='true'>Admin</role>
</person>

当我试图将它序列化为jsonstring json = JsonConvert.SerializeXmlNode(xml);时,它忽略了名称空间。
 {
  "person": {
    "@id": "1",
    "name": "Alan",
    "url": "http://www.google.com",
    "role": [
      "Admin"
    ]
  }
}

当我将它反序列化回xmlXmlDocument xml = JsonConvert.DeserializeXmlNode(json)时,会得到以下结果:
<person id='1'>
 <name>Alan</name>
  <url>http://www.google.com</url>
  <role>Admin</role>
</person>

如何保留json:Array属性?

最佳答案

存在接受名为DeserializeXmlNode的布尔标志的writeArrayAttribute的重载。这就是你需要的:

XmlDocument xml = JsonConvert.DeserializeXmlNode(json, null, true);

生产:
<person id="1">
    <name>Alan</name>
    <url>http://www.google.com</url>
    <role xmlns:json="http://james.newtonking.com/projects/json" json:Array="true">Admin</role>
</person>

它在语义上与原始xml完全相同。

07-24 19:56