0
JsonConvert.SerializeXNode("<Root><Student key="Student1" value="4" /> <Student key="Student2" value="0" /></Root>")

它的回报

{"Root":{Student:[{key:Student1,value=4}},Student:{key:Student2,value=0}]}

但是我需要

JsonConvert.SerializeXNode("<Root><Student key="Student1" value="4" /></Root>")

{"Root":[{Student:{key:Student1,value=4}}]}

但它的回报

{"Root":{Student:{key:Student1,value=4}}}

任何人都可以为此提供帮助

4

1 回答 1

0

您可以检测是否存在单个Student元素,如果是,则在其后添加一个元素,并删除所有属性。然后,您将其序列化为 JSON 并执行一个简单String.Replace()的操作以删除该null条目:

class Program
{
    static void Main(string[] args)
    {
        var singleElement = false;
        var x = XDocument
            .Parse(@"<Root><Student key=""Student1"" value=""4""/></Root>");
        if (x.Root.Elements().Count() == 1)
        {
            singleElement = true;
            var single = x.Root.Elements().First();
            x.Root.Elements().First().AddAfterSelf(single);
            x.Root.Elements().Last().Attributes().ToList()
                .ForEach(a => a.Remove());
            //optionally, remove the value, if you expect one
            x.Root.Elements().Last().Value = String.Empty;
        }
        var xml = JsonConvert.SerializeXNode(x);
        if (singleElement)
            xml = xml.Replace(",null", "");
    }
}
于 2013-08-07T07:42:17.963 回答