C# 在序列化之前向xml节点添加json:Array属性时获得意外结果
我有一个XML文档需要序列化为JSON。在我的handlebar.js在“each”表达式上出现问题之前,我一直都在工作(或者我认为是这样)。我已经将问题缩小到使用json.NET进行xml>json转换。有时可能有多个子元素的元素在转换为json时呈现为单个元素(而不是数组)。文档中指出,我必须向节点添加一个属性(json:Array=“true”),使其始终呈现为数组(不再打断我的把手) 我要做的第一件事是将名称空间添加到XML文档() 然后,我遍历每个节点,并对其进行测试,以查看是否需要添加该属性C# 在序列化之前向xml节点添加json:Array属性时获得意外结果,c#,json,json.net,handlebars.js,C#,Json,Json.net,Handlebars.js,我有一个XML文档需要序列化为JSON。在我的handlebar.js在“each”表达式上出现问题之前,我一直都在工作(或者我认为是这样)。我已经将问题缩小到使用json.NET进行xml>json转换。有时可能有多个子元素的元素在转换为json时呈现为单个元素(而不是数组)。文档中指出,我必须向节点添加一个属性(json:Array=“true”),使其始终呈现为数组(不再打断我的把手) 我要做的第一件事是将名称空间添加到XML文档() 然后,我遍历每个节点,并对其进行测试,以查看是否需要添
//Pseudo code
foreach(XmlNode node in list)
{
XmlAttribute attr = originalDoc.CreateAttribute(@"json:Array");
if(node.Name == "needsToBeAnArray")
{
node.Attributes.Append(attr);
}
}
然后将文档保存到内存流中,并将其重新加载到新的XmlDocument对象中
然而,我得到的结果json如下所示:
{"@Array":"true","item":[{"subitem":"foo", "subitem2":"foo2"}]}
根据我对JSON.NET文档的理解,它应该只是呈现为一个数组(而不是显示这个“@array”东西)。有没有人有过和经历过这个问题?所以如果有人感兴趣,我就知道我做错了什么。创建属性时:
XmlAttribute attr = originalDoc.CreateAttribute(@"json:Array");
我想用我的前缀给它命名。正确的方法是将前缀、名称和命名空间作为参数传入
XmlAttribute attr = doc.CreateAttribute("json", "Array", "http://james.newtonking.com/projects/json");
当您将
json
前缀添加到节点时,它似乎从json:Array
属性中剥离出来,因为它没有限定名称空间。如果没有json
前缀,该属性对json.Net没有特殊意义;因此,它被写入JSON,而不是更改输出行为
请像这样尝试:
string xml =
@"<person>
<name>Joe</name>
<age>28</age>
<role>Admin</role>
</person>";
XmlDocument doc = new XmlDocument();
doc.LoadXml(xml);
foreach (XmlNode node in doc.DocumentElement.ChildNodes)
{
if (node.Name == "role")
{
XmlAttribute att = doc.CreateAttribute("json", "Array", "http://james.newtonking.com/projects/json");
att.Value = "true";
node.Attributes.Append(att);
}
}
string json = JsonConvert.SerializeXmlNode(doc);
Console.WriteLine(json);
一小时前你在哪里布赖恩;)哈哈,想弄明白为什么它对你不起作用;-)看起来我们两个是并行工作的。
{
"person": {
"name": "Joe",
"age": "28",
"role": [
"Admin"
]
}
}