How do I write objects for easy XML Serialization in VB.NET?

后端 未结 3 691
离开以前
离开以前 2020-12-19 21:45

I\'m writing a small application in VB.NET and I would like some of the classes to be able to write themselves out to XML to serve as a \"save\" feature. I have seen XSD fi

相关标签:
3条回答
  • 2020-12-19 21:54

    Use the System.Xml and System.Xml.Serialization namespaces. They describe classes that you can use to annotate your classes' members with the corresponding tag.

    For example (in C#):

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

    Or in VB.NET (might not be completely syntactically correct):

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

    You can then use the XmlSerializer class to output XML.

    In C#:

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

    Or VB:

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

    Reference.

    0 讨论(0)
  • 2020-12-19 21:57

    To go with a simple 'save' feature either use the .net xml serialization [1] or create yourself a n in memory DateSet to persist the 'state of the world' in as many DateTables as your see fit. It rather depends how complext your object model that you are trying to persist is.

    [1] simplest example I could find quickly (C#, sorry but you'll get the gist) http://www.jonasjohn.de/snippets/csharp/xmlserializer-example.htm

    0 讨论(0)
  • 2020-12-19 22:01

    Since you asked about making it 'easy', then there are three rules to follow that will help keeps things very simple:

    1. Only use property types that are serializable
    2. Don't use collections or arrays as properties that need to be serialized
    3. Don't have properties with "bad" side-effects. By 'bad', I mostly mean two public properties that are backed by the same underlying private field.

    Note that if you break these rules you can probably still serialize your class, but it's likely to be a lot more work.

    For item #2, a quick fix is using a datatable or dataset, since those are serializable.

    0 讨论(0)
提交回复
热议问题