XmlSerializer 正在删除元素
本文关键字:元素 删除 XmlSerializer | 更新日期: 2023-09-27 18:31:51
我有一个程序,它将XML流反序列化为对象,进行一些小的更改,然后序列化为XML。 但这里的问题是生成的序列化 XML 缺少元素。
这是一个最小的程序,显示了我正在经历的事情:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Diagnostics;
using System.IO;
using System.Xml.Serialization;
namespace Playground
{
class Program
{
static string str = @"<report>
<residential>
<dwelling />
<property />
<detachedStructures />
</residential>
</report>";
static void Main(string[] args)
{
MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(str));
XmlSerializer s = new XmlSerializer(typeof(report));
report r = s.Deserialize(ms) as report;
MemoryStream ms2 = new MemoryStream();
s.Serialize(ms2, r);
ms2.Position = 0;
string output = new StreamReader(ms2).ReadToEnd();
System.Diagnostics.Debugger.Break();
}
}
[Serializable]
[XmlRoot("report")]
public class report
{
[XmlElement("residential")]
public XmlElement residential;
[XmlElement("residentialCaseHeader")]
public residentialCaseHeader residentialCaseHeader;
}
[System.SerializableAttribute()]
[System.Xml.Serialization.XmlRootAttribute(Namespace = "", IsNullable = false)]
public partial class residentialCaseHeader
{
}
}
注意:在反序列化步骤之后,我注意到一件非常奇怪的事情是它说"r.residential"的元素名称是"住宅"。
以下是程序的输出:
<?xml version="1.0"?>
<report xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<residential>
<dwelling />
</residential>
</report>
看来我只是得到了我的住宅元素的第一个孩子......任何人都可以理解这一点并告诉我我做错了什么吗?
考虑使用 '[XmlAnyElement']
类似的东西
[Serializable]
[XmlRoot("report")]
public class report
{
[XmlAnyElement("residential")]
public XmlElement[] residential;
[XmlElement("residentialCaseHeader")]
public residentialCaseHeader residentialCaseHeader;
}
报表类应与所有 XML 元素匹配。因此,元素住宅应该有另一类,包括田野住宅、财产、独立结构。
所以这就是我要用它做的。
[Serializable]
public class Residential
{
public string dwelling;
public string property;
public string detachedStructures;
}
[Serializable]
public class report
{
public Residential residential;
}