我有以下 xml 文件
<?xml version="1.0" encoding="UTF-8"?>
<root>
<UserData>
<User_Email>cynthia48@example.com</User_Email>
<User_Name>Louis Hebert</User_Name>
<User_State>South Dakota</User_State>
<id>item1</id>
</UserData>
<UserData>
<User_Email>brian52@example.com</User_Email>
<User_Name>David Lewis</User_Name>
<User_State>Connecticut</User_State>
<id>item2</id>
</UserData>
</root>
转换成json后的结果是这样的
{
"UserData": [
{
"User_Email": "cynthia48@example.com",
"User_Name": "Louis Hebert",
"User_State": "South Dakota",
"id": "item1"
},
{
"User_Email": "brian52@example.com",
"User_Name": "David Lewis",
"User_State": "Connecticut",
"id": "item2"
}
]
}
我正在使用的 C# 代码
XmlDocument xmldoc = new XmlDocument();
string xml1 = @"D:\Visual_Codes\Xml_Files\Data.xml";
xmldoc.Load(xml1);
xmldoc.RemoveChild(xmldoc.FirstChild);
string js = JsonConvert.SerializeXmlNode(xmldoc, Newtonsoft.Json.Formatting.Indented, true);
要求的输出
[
{
"User_Email": "cynthia48@example.com",
"User_Name": "Louis Hebert",
"User_State": "South Dakota",
"id": "item1"
},
{
"User_Email": "brian52@example.com",
"User_Name": "David Lewis",
"User_State": "Connecticut",
"id": "item2"
}
]
总结问题 xml转json后需要一个没有数组名的json文件
最佳答案
JsonConvert.SerializeXmlNode()
永远不会返回一个数组作为根 JSON 容器,因为如 Converting between JSON and XML 中所述,由于 XML 没有数组的概念,Json.NET 将重复的同名 XML 元素映射到 JSON 数组。因此,您想要的 JSON 只能从具有重复根元素的 XML 创建,如下所示:
<UserData>
<User_Email>cynthia48@example.com</User_Email>
<User_Name>Louis Hebert</User_Name>
<User_State>South Dakota</User_State>
<id>item1</id>
</UserData>
<UserData>
<User_Email>brian52@example.com</User_Email>
<User_Name>David Lewis</User_Name>
<User_State>Connecticut</User_State>
<id>item2</id>
</UserData>
但是,作为一个格式良好的 XML 文档必须有且只有一个 root element , 任何格式正确的 XML 文档都无法进行这种转换。
相反,您需要对 JSON 进行后处理以获得所需的 JSON 数组。这可以按如下方式完成。首先,创建以下扩展方法以将 XmlNode
直接转换为 JToken
:
public static partial class JsonExtensions
{
public static JToken ToJToken(this XmlNode node, bool omitRootObject = false, string deserializeRootElementName = null, bool writeArrayAttribute = false) =>
JToken.FromObject(node, JsonSerializer.CreateDefault(
new JsonSerializerSettings { Converters = { new XmlNodeConverter { OmitRootObject = omitRootObject, DeserializeRootElementName = deserializeRootElementName, WriteArrayAttribute = writeArrayAttribute } } }
));
}
现在您将能够:
var root = (JObject)xmldoc.DocumentElement.ToJToken(omitRootObject : true);
var array = root.PropertyValues().SingleOrDefault();
string js = array.ToString();
演示 fiddle here .
关于c# - 没有数组名称的XML到Json c#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73480116/