。
I have an input XML as below:
<Options>
<Series>
<Series>
<Type>Bar</Type>
<TargetAxisIndex>1</TargetAxisIndex>
</Series>
<Series>
<Type>Line</Type>
<TargetAxisIndex>2</TargetAxisIndex>
</Series>
</Series>
<Title>Test title</Title>
</Options>
我正在使用jsonconvert.serializexmlnode(),并希望将我的输出如下:
{"Series":
{
"0": {"Type":"Bar","TargetAxisIndex":"1"},
"1": {"Type":"Line","TargetAxisIndex":"2"}
}
"Title":"Test title"
}
有办法实现这一目标吗?基本上,我希望该节点被序列化为索引。
如果您不介意通过匿名类通过中间投影,然后从XmlDocument
切换到更linq友好的XDocument
,您将能够利用Select Oververne提供索引,然后应用.ToDictionary
以获取所需的JSON形状:
var root = XDocument.Load(pathToMyDocument)
.Root;
var myObject = new
{
Title = root.Element("Title").Value,
Series = root.Element("Series")
.Elements("Series")
.Select((node, idx) =>
new
{
Node = node,
Index = idx
})
.ToDictionary(
e => e.Index,
e => new
{
Type = e.Node.Element("Type").Value,
TargetAxisIndex = e.Node.Element("TargetAxisIndex").Value
})
};
var json = JsonConvert.SerializeObject(myObject);
结果:
{
"Title": "Test title",
"Series": {
"0": {
"Type": "Bar",
"TargetAxisIndex": "1"
},
"1": {
"Type": "Line",
"TargetAxisIndex": "2"
}
}
}
另一种选择可能是在使用SerializeXmlNode
之前,使用position()
函数在XSLT中进行字典和索引操作,尽管您需要减去1-这是一个基于一个。