我想通过实现 IXmlSerializable 来创建自定义 xml 序列化。我有这个实现 IXmlSerializable 接口的测试类:
[Serializable]
public class Employee : IXmlSerializable
{
public Employee()
{
Name = "Vyacheslav";
Age = 23;
}
public string Name{get; set;}
public int Age { get; set; }
public System.Xml.Schema.XmlSchema GetSchema()
{
return null;
}
public void ReadXml(XmlReader reader)
{
this.Name = reader["Name"].ToString();
this.Age = Int32.Parse(reader["Age"].ToString());
}
public void WriteXml(XmlWriter writer)
{
XmlWriterSettings settings = new XmlWriterSettings();
settings.OmitXmlDeclaration = true;
settings.ConformanceLevel = ConformanceLevel.Fragment;
XmlWriter newWriter = XmlWriter.Create(writer, settings);
newWriter.WriteAttributeString("Name", this.Name);
newWriter.WriteAttributeString("Age", this.Age.ToString());
}
}
我想要做的是省略 xml 声明。为此,我创建了适当的 XmlWriterSettings 实例并将其作为第二个参数传递以创建新的 XmlWriter。但是当我调试这段代码时,我看到 newWriter.Settings.OmitXmlDeclaration 设置为 false 并且序列化数据包含标记。我究竟做错了什么?
实际的序列化如下所示:
var me = new Employee();
XmlSerializer serializer = new XmlSerializer(typeof(Employee));
TextWriter writer = new StreamWriter(@"D:\file.txt");
serializer.Serialize(writer, me);
writer.Close();
第二个问题是 - 如果我想序列化在要序列化的字段中具有自定义类型 ContactInfo 的 Employee 类型,我是否也需要在 ContactInfo 上实现 IXmlSerializable ?