我有以下格式的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,但它会丢失数值并将所有内容都转换为双引号。
请提出适当的处理方法。
答案 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并以此方式进行比较。