XDocument to JSON, JsonProperties
Asked Answered
P

2

6

I am working with C# (ASP.Net, MVC) and Newtonsoft for JSON serialization. I get an XDocument like the one below which I would like to have in JSON format, for the view.

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

I have an Extension like this

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

The problem now is, that the description gets deserialized, so I have something like

... "description": { "p": "Description Text" }

which will be displayed as "[Object object]" when just posted as is.

  • Is there a way to set some JsonProperties for the XDocument (in general), without generating a completely deserialized class?
  • If not, is there a way to set some JsonProperty saying "Keep this as string, do not serialize any further"
  • If I were to use an XSD generated class for this, what "type" would I need to set? "anyType"?

Help would be appreciated, Best regards.

Proline answered 7/8, 2012 at 10:6 Comment(0)
B
13

I am adding this answer due to it's google search rank when looking up "c# convert xml to json XDocument".

string json = JsonConvert.SerializeXNode(xDocument);

This answer uses the more modern XNode vs XmlNode

Banderilla answered 22/5, 2019 at 20:38 Comment(2)
I originally down voted until I realized this answer has SerializeXNode and other answer is SerializeXmlNode and is not the same answer :)Woolf
Thanks for the upvote, may fortune shine upon you! :)Banderilla
G
4

Using Json.NET you can serialize an XML node directly to JSON using the following line:

string json = JsonConvert.SerializeXmlNode(xmlNode);

To convert your XDocument to XmlDocument see this question:

Converting XDocument to XmlDocument and vice versa

You can then use your converted XmlDocument as parameter for SerializeXmlNode() because it inherits from XmlNode.

Gill answered 8/8, 2012 at 15:32 Comment(3)
I would like to not use the JsonConvert, because it does not use the same serializer settings. It's not really an issue, I know how to convert Json to XmlDocument. But you are basically answering my question in going over XML to object and not directly. Last thing I would need to know is which type I'd have to set in the XSD file.Proline
Perhaps a stupid question, but why are you not using SerializeXNode instead of SerializeXmlNodeTrotskyite
@JPHellemons I have no clue. Maybe the method hasn't existed yet when I wrote the answer. But I honestly don't know anymore.Gill

© 2022 - 2024 — McMap. All rights reserved.