c# - 从对象到 Json 到 Xml 到对象
问题描述
我有这些课程:
public class House
{
public MyObject[] Objects { get; set; }
}
public class MyObject
{
public string Name { get; set; }
}
我这样实例化:
var house1 = new House
{
Objects = new MyObject[]
{
new MyObject() { Name = "Name1" },
new MyObject() { Name = "Name2" }
}
};
然后我得到它的 json 表示:
var jsonSerializerSettings = new JsonSerializerSettings()
{
TypeNameHandling = TypeNameHandling.Objects
};
string json = JsonConvert.SerializeObject(house1, jsonSerializerSettings);
从后者我得到相对的XML:
XmlDocument doc = (XmlDocument)Newtonsoft.Json.JsonConvert.DeserializeXmlNode(json, "House", true);
string xmlString = doc.OuterXml;
最后,我将 xml 转换为初始类型的对象:
XmlSerializer serializer = new XmlSerializer(typeof(House));
TextReader reader = new StringReader(xmlString);
House house2 = (House)serializer.Deserialize(reader)
问题是:
- 为什么house1与house2不同?(house2.Objects 是空的!)
- 我究竟做错了什么?
在这里您可以找到一个 dotnetfiddle 示例
解决方案
JSON序列化程序生成的XML:
<House xmlns:json="http://james.newtonking.com/projects/json" json:type="Program+House, ayusorzt">
<Objects json:type="Program+MyObject, ayusorzt">
<Name>
Name1
</Name>
</Objects>
<Objects json:type="Program+MyObject, ayusorzt">
<Name>
Name2
</Name>
</Objects>
</House>
XMLSerializer
无法解除此 XML 对象的脱轨。正确的 XML 对象应如下所示:
<House>
<Objects>
<MyObject>
<Name>
Name1
</Name>
</MyObject>
<MyObject>
<Name>
Name2
</Name>
</MyObject>
</Objects>
</House>
您可以通过以下代码修复它:
var xmlSerializer = new XmlSerializer<House>();
var obj = JsonConvert.DeserializeObject<House>();
using(StringWriter textWriter = new StringWriter())
{
xmlSerializer.Serialize(textWriter, obj);
string yourXml = textWriter.ToString();
}
推荐阅读
- python - 如何在 ctypes 中使用 typedef
- java - Spring Boot 2 Maven 目录视图解析器
- post - 如何编写要在 Informatica Cloud 后处理命令中使用的脚本
- c# - DateTime 和 DateTimeOffset 转换问题
- bash - 访问名称中包含整数的变量
- vue.js - 我可以获取 Vue.js 组件作为实例吗?
- php - Ubuntu PHP 5 安装 Curl 找不到包
- project-reactor - 在 JAX-RS 驱动的服务器中使用反应器时如何处理阻塞调用?
- asp.net-mvc - 如何从 Controller 获取 @ViewBag.UserName 到 _layout 页面?
- jenkins - 如何以阻塞方式链接构建管道?