我正在将 SQL 输出 XML 转换为 C# 中的 JSON 转换。当我将具有多个集合元素的 XML 转换为 JSON 时,输出如 JSON 数组,同时 XML 具有单个集合,然后输出如 JSON 对象。在这两种情况下,如何将输出维护为 JSON 数组?
情况1:
<root>
<DATA>
<NAME>NAYAN</NAME>
<LOCATION>CHENNAI</LOCATION>
</DATA>
<DATA>
<NAME>TARA</NAME>
<LOCATION>CHENNAI</LOCATION>
</DATA>
</root>
结果:
{
"DATA": [
{
"NAME": "NAYAN",
"LOCATION": "CHENNAI"
},
{
"NAME": "TARA",
"LOCATION": "CHENNAI"
}
]
}
案例2:
<root>
<DATA>
<NAME>NAYAN</NAME>
<LOCATION>CHENNAI</LOCATION>
</DATA>
</root>
结果:
{
"DATA": {
"NAME": "NAYAN",
"LOCATION": "CHENNAI"
}
}
期待:
{
"DATA":[
{
"NAME": "NAYAN",
"LOCATION": "CHENNAI"
}
]
}
这是我的 C# 代码:
static void Main(string[] args)
{
string xml = @"<root>
<DATA>
<NAME>NAYAN</NAME>
<LOCATION>CHENNAI</LOCATION>
</DATA>
</root>";
XmlDocument doc = new XmlDocument();
doc.LoadXml(xml);
string json = JsonConvert.SerializeXmlNode(doc,Newtonsoft.Json.Formatting.Indented,true);
Console.WriteLine(json);
}
在这里,我创建了一个简单的实用程序函数,DATA
如果DATA
包含对象或数组,它可以获取您的令牌并将其解析为数组。
public class Utility
{
public static string JsonParser(string json)
{
JToken jTokenMain = JToken.Parse(json);
JToken jToken = jTokenMain["DATA"];
List<object> list = new List<object>();
if (jToken is JArray)
{
list = jToken.ToObject<List<object>>();
}
else if (jToken is JObject)
{
list.Add(jToken.ToObject<object>());
}
JToken data = JToken.FromObject(list);
jTokenMain["DATA"] = data;
return jTokenMain.ToString();
}
}
您可以使用上述功能,如
XmlDocument doc = new XmlDocument();
doc.LoadXml(xml);
string json = JsonConvert.SerializeXmlNode(doc, Newtonsoft.Json.Formatting.Indented, true);
string formattedJson = Utility.JsonParser(json);
编辑:
在您的 xml 中<root>
是第 0 级元素,<DATA>
是第 1 级元素,它的名称可以是任何内容,并且您希望此元素在 json 中是 Array,无论是它的对象还是 xml 中的数组。
XDocument doc = XDocument.Parse(xml);
//XDocument doc = XDocument.Load(@"Path to your xml");
Dictionary<string, object> dict = doc.Root.Elements()
.GroupBy(x => x.Name.LocalName, y => new
{
Name = y.Element("NAME").Value,
Location = y.Element("LOCATION").Value
})
.ToDictionary(x => x.Key, y => (object)y.ToList());
string json = JsonConvert.SerializeObject(dict);
Console.WriteLine(json);
案例 1:(第一级元素名称是DATA
)
<root>
<DATA>
<NAME>NAYAN</NAME>
<LOCATION>CHENNAI</LOCATION>
</DATA>
</root>
输出:(带有键名的 Json 是DATA
)
情况 2:(第一级元素名称为SAMPLE
)
<root>
<SAMPLE>
<NAME>NAYAN</NAME>
<LOCATION>CHENNAI</LOCATION>
</SAMPLE>
</root>
输出:(带有键名的 Json 是SAMPLE
)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句