以适当的类型从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可以区分stringnumberboolean而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 }