使用JSON.NET将XML转换为JSON时,具有索引值为节点


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-这是一个基于一个。

相关内容

  • 没有找到相关文章

最新更新