【问题标题】:Class is serialized to XML without a class name类被序列化为没有类名的 XML
【发布时间】:2011-08-16 07:12:04
【问题描述】:

我尝试序列化一个类,定义如下:

        [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>

不是我所期望的。只是省略了类名。这里有什么问题?

【问题讨论】:

    标签: .net xml xml-serialization


    【解决方案1】:

    您将根元素明确命名为“存储库”,这就是它以这种方式显示的原因。尝试省略该语句:)

    我认为你想要的是在这个 Repository 元素之后有 Human。为此,您需要在 Repository 下创建另一个根元素,然后将您的对象序列化为该元素。您应该注意,XmlSerializer 通常用于将对象写入 xml 文件,而不是真正创建整个 xml 文件。我有一个可能对你有用的例子:

    System.Xml.XmlTextWriter writer = new System.Xml.XmlTextWriter(FilePath, null);
    writer.WriteStartDocument();
    writer.Formatting = Formatting.Indented;
    writer.WriteStartElement("Repository");
    
    Human h = new Human(id, Name, isEducated);
    XmlRootAttribute root = new XmlRootAttribute();
    root.ElementName = "Human"; 
    XmlSerializer xs = new XmlSerializer(typeof(Human), root);
    xs.Serialize(writer, h);
    
    writer.WriteEndElement();
    writer.Close();
    

    类似的东西......我真的很困:/

    【讨论】:

    • 好吧,请您澄清一下我如何明确指定该子根元素?
    猜你喜欢
    • 1970-01-01
    • 2011-03-13
    • 1970-01-01
    • 1970-01-01
    • 2019-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多