代码之家  ›  专栏  ›  技术社区  ›  Mark

如何在VB.NET中编写易于XML序列化的对象?

  •  3
  • Mark  · 技术社区  · 17 年前

    我正在用VB.NET编写一个小应用程序,我希望其中的一些类能够将自己写入XML,作为“保存”功能。我见过用于生成VB类的XSD文件,这些VB类可以很容易地将自己序列化为XML,也可以将自己序列化为XML。如果我有任何预先存在的XML格式需要遵守,因为我只是自己创建类,我该怎么做?

    3 回复  |  直到 17 年前
        1
  •  6
  •   Joel Coehoorn    17 年前

    使用System.Xml和System.Xml.Serialization命名空间。它们描述的类可以用来用相应的标记注释类的成员。

    例如(在C中):

    [XmlRoot("foo")]
    public class Foo
    {
         [XmlAttribute("bar")] 
         public string bar;
         [XmlAttribute("baz")] 
         public double baz;
    }
    

    <XmlRoot ("foo")> _
    Public Class Foo
         <XmlAttribute ("bar")>_
         Public bar As String
         <XmlAttribute ("baz")>_
         Public baz As String
    End Class
    

    然后可以使用XmlSerializer类输出XML。

    在C#中:

    using(XmlSerializer xmls = new XmlSerializer(typeof(Foo)){
        TextWriter tw = new StreamWriter( "foo.xml" );
        //use it!
    }
    

    Using xmls As New XmlSerializer(gettype(Foo)), _
        tw As TextWriter = New StreamWriter("foo.xml")
    
        ''//use it!
    End Using
    

    Reference .

        2
  •  2
  •   Joel Coehoorn    17 年前

    1. 仅使用可序列化的属性类型
    2. 不要将集合或数组用作需要序列化的属性
    3. 没有“坏”副作用的属性。所谓“坏”,我主要是指两个公共属性,它们由相同的底层私有字段支持。

    请注意,如果您违反这些规则,您可能仍然可以序列化您的类,但这可能需要做更多的工作。

        3
  •  0
  •   Adam Straughan    17 年前

    要使用简单的“保存”功能,请使用.net xml序列化[1]或自己创建一个n个内存中的日期集,以便在您认为合适的多个日期表中持久保存“世界状态”。这取决于您试图持久化的对象模型有多复杂。

    http://www.jonasjohn.de/snippets/csharp/xmlserializer-example.htm