将XDocument转换为JSON,JsonProperties

5

我正在使用C#(ASP.NET,MVC)和Newtonsoft进行JSON序列化。 我得到了像下面这样的XDocument,我想将其转换为JSON格式,以便在视图中使用。

<group>
  <name>Group 1</name>
  <description><p>Description</p></description>
  <section>
    ..
  </section>
  <section>
    ..
  </section>
</group>

我有一个像这样的扩展

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();
  }
}

现在的问题是,描述被反序列化了,所以我得到了像这样的东西:
... "description": { "p": "Description Text" }

如果直接发布,它将显示为“[Object object]”。

  • 是否有一种方法可以为XDocument(通常情况下)设置一些JsonProperties,而不生成完全反序列化的类?
  • 如果没有,是否有一种方法可以设置一些JsonProperty,表示“保留此字符串,不要进一步序列化”
  • 如果我要为此使用由XSD生成的类,我需要设置什么“类型”?“anyType”?

希望能得到帮助,最好的问候。

2个回答

12

我添加了这个答案是因为当搜索"c# convert xml to json XDocument"时,它在谷歌搜索排名靠前。


string json = JsonConvert.SerializeXNode(xDocument);

这个答案使用更现代的 XNode 替代了 XmlNode


我最初投了反对票,直到我意识到这个答案有SerializeXNode,而另一个答案是SerializeXmlNode,并不是同一个答案 :) - ttugates
感谢您的点赞,愿幸运之神眷顾您! :) - Troy Witthoeft

4
使用Json.NET,您可以使用以下代码将XML节点直接序列化为JSON:
string json = JsonConvert.SerializeXmlNode(xmlNode);

如需将您的XDocument转换为XmlDocument,请参见此问题:

将XDocument转换为XmlDocument和反之亦然

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


我不想使用JsonConvert,因为它没有使用相同的序列化设置。这并不是真正的问题,我知道如何将Json转换为XmlDocument。但您基本上正在通过XML转换对象来回答我的问题,而不是直接回答。我最后需要知道的是在XSD文件中我需要设置哪种类型。 - Cabadath
3
也许这个问题有些愚蠢,但为什么你不使用SerializeXNode而使用SerializeXmlNode呢? - JP Hellemons
1
@JPHellemons 我不知道。也许当我写下这个答案时,这个方法还不存在。但是现在我真的不知道了。 - fero

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接