1

我有以下格式的 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,但它会丢失数值并将所有内容转换为双引号。

请提出适当的方法来处理这个问题。

4

2 回答 2

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");

文档在这里

然后在完成处理后,您可以将 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);

文档在这里

于 2018-07-19T18:27:54.517 回答
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 并以这种方式比较它们。

于 2018-07-19T18:38:06.357 回答