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?
JSON 和 XML 是不同的序列化格式,并且具有不同的功能。 JSON可以区分string
、number
和boolean
,而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
}