我有以下XML需要转换为下面显示的JSON。我正在使用Newtonsoft.Json,无法找到正确的配置和json:Array
属性组合来获得我需要的东西。我还缺少其他属性吗?我需要编写自定义转换器吗?
这是我的XML:
<Container>
<Encounters>
<Encounter>
<a>a1</a>
<b>b1</b>
</Encounter>
<Encounter>
<a>a2</a>
<b>b2</b>
</Encounter>
</Encounters>
</Container>
这是我需要的JSON:
{
"Container": {
"Encounters" : [
{
"a": "a1",
"b": "b1"
},
{
"a": "a2",
"b": "b2"
}
]
}
}
这是我目前正在获得的JSON:
{
"Container": {
"Encounters" : {
"Encounter" : [
{
"a": "a1",
"b": "b1"
},
{
"a": "a2",
"b": "b2"
}
]
}
}
}
答案 0 :(得分:3)
json:Array='true'
无法在这种情况下为您提供所需的结果。此属性旨在表示您希望将特定XML元素在仅存在其中一个的情况下转换为JSON时将其视为数组。如果存在多个特定XML元素,则它们将自动被视为数组。因此,在您的情况下,多个Encounter
元素将成为单个Encounters
对象内的数组。看起来你真的想把它压平一层。 Json.Net无法使用XML中的属性来实现此目的。因此,有三种可能的方法可以解决这个问题:
我认为方法2可能是最容易使用LINQ-to-JSON API(JObjects):
string xml =
@"<Container>
<Encounters>
<Encounter>
<a>a1</a>
<b>b1</b>
</Encounter>
<Encounter>
<a>a2</a>
<b>b2</b>
</Encounter>
</Encounters>
</Container>";
// Convert XML to a JObject
JObject root = JObject.Parse(JsonConvert.SerializeXNode(XElement.Parse(xml)));
// Move the array of Encounter objects up one level
JProperty encounters = ((JObject)root["Container"]).Property("Encounters");
encounters.Value = encounters.Value["Encounter"];
// Output the JSON
string json = root.ToString();
Console.WriteLine(json);
输出:
{
"Container": {
"Encounters": [
{
"a": "a1",
"b": "b1"
},
{
"a": "a2",
"b": "b2"
}
]
}
}