Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 类被序列化为不带类名的XML_.net_Xml_Xml Serialization - Fatal编程技术网

.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();

诸如此类……我真的很困://

好吧,请您澄清一下,我如何明确指定子根元素?