我有一些这种格式的示例 JSON:
{
"id": "532-513jg-5ujkl-5jiklf",
"externalGuid": "93804jlkfes",
"tagNumber": "2KMA",
"project": {
"id": "532kg-fw13jg-553klal-5jiklf",
"projectName": "Test",
"projectId": "1"
},
"properties": [
{
"id": "jkl39-jkl39084-agd208-hh82a9",
"name": "Weight",
"value": "1000",
"statusCode": {
"name": "Accepted",
"code": 1
}
},
{
"id": "jkl39-jkl384-123208-hh82a9",
"name": "Length",
"value": "10",
"statusCode": {
"name": "Not Accepted",
"code": 3
}
}
]
}
我想将其转换为 XML,因此我执行以下操作:
XmlDocument node = JsonConvert.DeserializeXmlNode(jsonString, "tag");
这给了我以下 XML:
<tag>
<id>532-513jg-5ujkl-5jiklf</id>
<externalGuid>93804jlkfes</comosUID>
<tagNumber>2KMA</tagNumber>
<project>
<id>532kg-fw13jg-553klal-5jiklf</id>
<projectName>Test</projectName>
<projectId>1</projectId>
</project>
<properties>
<id>jkl39-jkl39084-agd208-hh82a9</id>
<name>Weight</name>
<value>1000</value>
<statusCode>
<name>Accepted</name>
<code>1</code>
</statusCode>
<properties>
<id>jkl39-jkl384-123208-hh82a9</id>
<name>Length</name>
<value>10</value>
<statusCode>
<name>Not Accepted</name>
<code>3</code>
</statusCode>
</properties>
</tag>
这几乎就是我想要的。然而,要导入 XML 的系统需要稍微不同的格式。它希望每个属性都以 <property>
开头和结尾。标签。所以属性数组看起来像这样:
<properties>
<property>
<id>jkl39-jkl39084-agd208-hh82a9</id>
<name>Weight</name>
<value>1000</value>
<statusCode>
<name>Accepted</name>
<code>1</code>
</statusCode>
</property>
<property>
<id>jkl39-jkl384-123208-hh82a9</id>
<name>Length</name>
<value>10</value>
<statusCode>
<name>Not Accepted</name>
<code>3</code>
</statusCode>
</property>
</properties>
如何使 XML 与此模板匹配?即替换properties
标签为 property
,并包裹所有 property
properties
中的标签父标签。
最佳答案
要更改输入格式,您应该首先将 JSON 反序列化为匹配模型,然后您可以使用 System.Xml.Linq 按您想要的顺序导出节点并构建任何您想要的结构。
Model model = JsonConvert.DeserializeObject<model>(jsonString);
var xml = new XElement("properties",
new XElement("property",
new XElement("id", model.Id),
new XElement("name", model.Name) /*and so on*/));
看起来需要写很多东西,但实际上您可以使用 XML 做任何您想做的事情。您可以准备方法来处理模型并对其进行调整,但这取决于您的要求。
您还可以创建另一个模型,其结构与 xml 文件的结构相对应,然后您必须用原始节点中的数据填充该模型,但这看起来像是很多不必要的工作。我个人将使用 System.Xml.Linq 来完成此类任务。
关于c# - 如何在 C# 中添加自定义标签将 JSON 转换为 XML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69191452/