首页 > 解决方案 > Newtonsoft.Json:当有附加属性时如何将 json 转换为 xml?

问题描述

这是必需的,因为我们使用的产品只能处理 xml 而不能处理 json。这适用于大多数 json 响应。

现在我们必须在传入的 json 中支持其他属性(任何)。所以我们创建了一个带有“ProcessContents = lax”的“Any”元素的xsd 模式。生成的类包含如下所示的任何元素。

public System.Xml.XmlElement Any
   {
    get { return this.anyField; }
    set { this.anyField = value; }
   }

以下是不同 Json 输入的行为。

有人可以提供一种方法来做到这一点。谢谢。

Edit1: 在建议使用 JsonExtensionData 之后,该类看起来像这样。 在此处输入图像描述

我看到附加属性被反序列化为一个对象,如下图所示。 在此处输入图像描述 收到错误:“无法序列化 System.Collections.Generic.Dictionary`2 类型的成员 .AdditionalProperties [[System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[System.Object, mscorlib, Version=4.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089]],因为它实现了 IDictionary。"} 问:如何解决这个问题并将其序列化为 XmlAny 元素?谢谢。

标签: c#jsonxmljson.netjson2csharp

解决方案


与其将 JSON 解析为 Object,然后将 Object 解析为 XML,为什么不直接使用 JSON -> XML?

Newtonsoft 提供了一种方法来做到这一点。

var node = JsonConvert.DeserializeXNode(jsonString, "Root");

https://www.newtonsoft.com/json/help/html/ConvertJsonToXml.htm

编辑:回读后,我意识到使用 XSD Schema 是一项业务需求。


推荐阅读