以适当的类型从JsonConvert.SerializeXNode返回json
var test = new { TestStr = "test", TestNumber = 123, TestDate = new DateTime(1986, 1, 13, 17, 50, 31), TestBool = true }; var xml = JsonConvert.DeserializeXNode(JsonConvert.SerializeObject(test), "test");
这段代码返回了很好的xml元素:
1986-01-13T14:50:31Z true 123 test
当我尝试将此xml转换回JSON时 :
var json = JsonConvert.SerializeXNode(xml, Formatting.None, true);
我只使用String
属性获取JSON。
我该怎么做才能让json得到合适的类型?
JSON和XML是不同的序列化格式,具有不同的function。 JSON可以区分string
, number
和boolean
而XML将所有内容视为字符串。 因此,当您从JSON转换为XML并返回时,类型信息会丢失。 处理此问题的一种方法是在来回转换时使用强类型中间模型。 换句话说,不是直接从XML转换为JSON,而是将XML反序列化为模型,然后将模型序列化为JSON。 该模型将强制数据为正确的类型。
这是一个例子:
class Program { static void Main(string[] args) { string xml = @" 1986-01-13T14:50:31Z true 123 test "; XmlSerializer ser = new XmlSerializer(typeof(Test)); Test test = (Test)ser.Deserialize(new StringReader(xml)); string json = JsonConvert.SerializeObject(test, Formatting.Indented); Console.WriteLine(json); } } [XmlType("test")] public class Test { public string TestStr { get; set; } public int TestNumber { get; set; } public DateTime TestDate { get; set; } public bool TestBool { get; set; } }
输出:
{ "TestStr": "test", "TestNumber": 123, "TestDate": "1986-01-13T14:50:31Z", "TestBool": true }