0
  • 我们创建一个匹配 json 的 xsd 模式
  • 从 xsd 模式生成 ac# 类
  • 使用newtonsoft.json将json反序列化为object和object to xml(基于生成的类)

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

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

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

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

  • json 必须包含名称“Any”以匹配任何元素。这不满足附加属性的想法。
  • 我可以添加一个“JsonProperty("SomeName")”,但我仍然应该知道我不知道的附加属性名称。

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

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 元素?谢谢。

4

1 回答 1

0

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

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

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

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

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

于 2020-11-16T18:43:56.467 回答