XDocument 转 JSON、JsonProperties

Cab*_*ath 4 c# json properties linq-to-xml json.net

我正在使用 C#(ASP.Net、MVC)和 Newtonsoft 进行 JSON 序列化。我得到了一个 XDocument,就像下面我想要的 JSON 格式一样,用于视图。

<group>
  <name>Group 1</name>
  <description><p>Description</p></description>
  <section>
    ..
  </section>
  <section>
    ..
  </section>
</group>
Run Code Online (Sandbox Code Playgroud)

我有一个这样的扩展

private static readonly JsonSerializer jSerializer = JsonSerializer.Create(new JsonSerializerSettings {});

public static string ToJson(this object obj) {
  using (StringWriter writer = new StringWriter()) {
    jSerializer.Serialize(writer, obj);
    return writer.ToString();
  }
}
Run Code Online (Sandbox Code Playgroud)

现在的问题是,描述被反序列化了,所以我有类似的东西

... "description": { "p": "Description Text" }
Run Code Online (Sandbox Code Playgroud)

当按原样发布时,它将显示为“[Object object]”。

  • 有没有办法为 XDocument 设置一些 JsonProperties(通常),而不生成完全反序列化的类?
  • 如果没有,有没有办法设置一些 JsonProperty 说“将其保留为字符串,不要进一步序列化”
  • 如果我为此使用 XSD 生成的类,我需要设置什么“类型”?“任何类型”?

帮助将不胜感激,最好的问候。

Tro*_*eft 6

我添加这个答案是因为它在查找“c# convert xml to json XDocument”时的谷歌搜索排名。

string json = JsonConvert.SerializeXNode(xDocument);
Run Code Online (Sandbox Code Playgroud)

这个答案使用了更现代的XNodevsXmlNode


fer*_*ero 4

使用 Json.NET,您可以使用以下行将 XML 节点直接序列化为 JSON:

string json = JsonConvert.SerializeXmlNode(xmlNode);
Run Code Online (Sandbox Code Playgroud)

要让您XDocument看到XmlDocument这个问题:

将 XDocument 转换为 XmlDocument,反之亦然

然后,您可以使用转换后的XmlDocument参数作为 for 的参数SerializeXmlNode(),因为它继承自XmlNode

  • 也许是一个愚蠢的问题,但为什么你不使用“SerializeXNode”而不是“SerializeXmlNode” (3认同)