从JsonConvert.SerializeXNode返回正确类型的json

lp0sw83n  于 12个月前  发布在  其他
关注(0)|答案(1)|浏览(143)
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元素:

<test>
  <TestDate>1986-01-13T14:50:31Z</TestDate>
  <TestBool>true</TestBool>
  <TestNumber>123</TestNumber>
  <TestStr>test</TestStr>
</test>


当我尝试将此xml转换回JSON时:

var json = JsonConvert.SerializeXNode(xml, Formatting.None, true);


我只使用String属性获取JSON。
我应该怎么做才能让json有正确的类型?

myss37ts

myss37ts1#

JSON和XML是不同的序列化格式,并且具有不同的功能。JSON可以区分stringnumberboolean,而XML将所有内容都视为字符串。因此,当您从JSON转换为XML时,类型信息会丢失。处理此问题的一种方法是在来回转换时使用强类型中间模型。换句话说,与其直接从XML转换为JSON,不如将XML转换为模型,然后将模型序列化为JSON。模型将强制数据为正确的类型。
下面是一个示例:

class Program
{
    static void Main(string[] args)
    {
        string xml = @"
        <test>
          <TestDate>1986-01-13T14:50:31Z</TestDate>
          <TestBool>true</TestBool>
          <TestNumber>123</TestNumber>
          <TestStr>test</TestStr>
        </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
}

相关问题