c# - 如何在 C# 中添加自定义标签将 JSON 转换为 XML

标签 c# json .net xml

我有一些这种格式的示例 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/

相关文章:

c# - 如何有条件地格式化 WPF TextBlock?

c# - 为什么显式实现的接口(interface)方法是用 callvirt 调用的,而隐式实现的不是?

c# - 列序列和 Entity Framework

c# - Entity Framework Core 的 Cosmos 提供程序使用 DbContext 类名称创建容器

javascript - 使用 JSON 数组填充输入字段

java - JSON 到 java 的转换

javascript - 根据网络表单单选按钮选择显示结果 div

c# - 在 C# 中计算过滤的 excel 范围的行数

c# - vs2010 .net 4.0 到 .net 3.x

c# - 在没有 ICommand 的情况下将事件绑定(bind)到 ViewModel 的方法