将JSON转换为XML,然后再次转换为JSON

时间:2018-07-19 18:24:21

标签: c# json xml jsonconverter

我有以下格式的JSON文件,该文件具有不同类型的值(字符串,数字,布尔值和Null)。我想将此JSON转换为xml格式以进行某些数据处理,然后再转换回相同的JSON格式。需要确保它不应丢失任何数据类型。这些数字用双引号括起来,然后应该是相同的;如果某些数字用双引号括起来,那么它应该没有双引号。

  {
        "Source": "WEB",
        "CodePlan": 5,
        "PlanSelection": "1",
        "PlanAmount": "500.01",
        "PlanLimitCount": 31,
        "PlanLimitAmount": "3000.01",
        "Visible": false,
        "Count": null
     }

当前,我尝试将JsonConvert对象转换为serializeObject和DeserializeObject,但它会丢失数值并将所有内容都转换为双引号。

请提出适当的处理方法。

2 个答案:

答案 0 :(得分:1)

使用JSON.net看一看,然后可以使用它将JSON转换为XML

string json = @"{
  '@Id': 1,
  'Email': 'james@example.com',
  'Active': true,
  'CreatedDate': '2013-01-20T00:00:00Z',
  'Roles': [
    'User',
    'Admin'
  ],
  'Team': {
    '@Id': 2,
    'Name': 'Software Developers',
    'Description': 'Creators of fine software products and services.'
  }
}";

XNode node = JsonConvert.DeserializeXNode(json, "Root");

文档here

然后,在完成处理后,您可以像这样将XML转换回JSON:

string xml = @"<?xml version='1.0' standalone='no'?>
<root>
  <person id='1'>
  <name>Alan</name>
  <url>http://www.google.com</url>
  </person>
  <person id='2'>
  <name>Louis</name>
  <url>http://www.yahoo.com</url>
  </person>
</root>";

XmlDocument doc = new XmlDocument();
doc.LoadXml(xml);

string json = JsonConvert.SerializeXmlNode(doc);

文档here

答案 1 :(得分:0)

我会做的事情与亚当·H的回答有所不同。 首先,我要声明一个要使用的类:

/* Note I am using string instead of double for PlanAmount and PlanLimitAmount because you have 
 * those values surrounded by double quotes. If you want to use double instead make sure your JSON does not 
 * have double quotes around the numbers */
public class MyClass 
{
    public string Source { get; set; }
    public int CodePlan { get; set; }
    public string PlanSelection { get; set; }
    public string PlanAmount { get; set; }
    public int PlanLimitCount { get; set; }
    public string PlanLimitAmount { get; set; }
    public bool Visible { get; set; }
    public int? Count { get; set; }

}

然后使用几种方法,您应该能够将该类序列化为JSON或XML:

// You can convert the JSON to an instance of MyClass like this
public MyClass ConvertJsonToMyClass(string json)
{
    return JsonConvert.DeserializeObject<MyClass>(json);
}

// You can also convert an instance of MyClass to JSON like this
public string ConvertMyClassToJson(MyClass obj)
{
    return JsonConvert.SerializeObject(obj);
}

// You can also serialize your object to XML
public MyClass ConvertMyClassToXML(MyClass obj)
{
    System.IO.StringWriter stringWriter = new System.IO.StringWriter();
    XmlSerializer serializer = new XmlSerializer(obj.GetType());
    serializer.Serialize(stringWriter, obj);
    return stringWriter.ToString();
}

除此之外,您可能只需将文本反序列化为MyClass的实例,然后直接比较对象即可,而不是序列化为XML并以此方式进行比较。