.net 类被序列化为不带类名的XML
我尝试序列化一个类,定义如下:.net 类被序列化为不带类名的XML,.net,xml,xml-serialization,.net,Xml,Xml Serialization,我尝试序列化一个类,定义如下: [DataContract] public class Human { public Human() { } public Human(int id, string Name, bool isEducated) { this.id = id; this.Name = Name; this.isEducated
[DataContract]
public class Human
{
public Human() { }
public Human(int id, string Name, bool isEducated)
{
this.id = id;
this.Name = Name;
this.isEducated = isEducated;
}
[DataMember]
public int id { get; set; }
[DataMember]
public string Name { get; set; }
[DataMember]
public bool isEducated { get; set; }
}
然后它将被序列化:
Human h = new Human(id, Name, isEducated);
XmlRootAttribute root = new XmlRootAttribute();
root.ElementName = "Repository";
XmlSerializer xs = new XmlSerializer(typeof(Human), root);
FileStream fs = new FileStream(fname, FileMode.Open);
xs.Serialize(fs, h);
这就是结果:
<Repository xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<id>1</id>
<Name>Vill</Name>
<isEducated>false</isEducated>
</Repository>
1.
维尔
假的
这不是我所期望的。只是省略了类名。这里有什么问题?您显式地将根元素命名为“Repository”,这就是它以这种方式显示的原因。试着省略那句话:) 我认为您想要的是在这个存储库元素之后有一个人。要做到这一点,您需要在存储库下面创建另一个根元素,然后将对象序列化到该根元素中。您应该注意,XmlSerializer通常用于将对象写入xml文件,而不是真正创建整个xml文件。下面我举了一个可能对你有用的例子:
System.Xml.XmlTextWriter=new System.Xml.XmlTextWriter(文件路径,null);
writer.WriteStartDocument();
writer.Formatting=格式化.缩进;
writer.writeStarteElement(“存储库”);
人类h=新人类(id、姓名、是否受过教育);
XmlRootAttribute root=新的XmlRootAttribute();
root.ElementName=“人”;
XmlSerializer xs=新的XmlSerializer(typeof(Human),root);
序列化(writer,h);
writer.writeedelement();
writer.Close();
诸如此类……我真的很困://好吧,请您澄清一下,我如何明确指定子根元素?