私は VB.NET で小さなアプリケーションを作成していますが、いくつかのクラスを XML に書き込んで「保存」機能として使用できるようにしたいと考えています。XSD ファイルを使用して、XML との間で非常に簡単にシリアル化できる VB クラスを生成するのを見てきました。自分でクラスを作成しているだけなので、準拠する必要がある既存の XML 形式がある場合、これを行うにはどうすればよいでしょうか?
3 に答える
System.XmlおよびSystem.Xml.Serialization名前空間を使用します。これらは、クラスのメンバーに対応するタグで注釈を付けるために使用できるクラスを記述します。
例(C#の場合):
[XmlRoot("foo")]
public class Foo
{
[XmlAttribute("bar")]
public string bar;
[XmlAttribute("baz")]
public double baz;
}
またはVB.NETの場合(構文的に完全に正しくない場合があります):
<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!
}
またはVB:
Using xmls As New XmlSerializer(gettype(Foo)), _
tw As TextWriter = New StreamWriter("foo.xml")
''//use it!
End Using
参照。
あなたはそれを「簡単」にすることについて尋ねたので、物事を非常にシンプルに保つのに役立つ3つのルールがあります:
- シリアル化可能なプロパティ タイプのみを使用する
- シリアル化が必要なプロパティとしてコレクションまたは配列を使用しないでください
- 「悪い」副作用のあるプロパティを持たないでください。「悪い」とは、ほとんどの場合、同じ基礎となるプライベート フィールドによってサポートされている 2 つのパブリック プロパティを意味します。
これらのルールを破っても、おそらくクラスをシリアル化できますが、より多くの作業が必要になる可能性があることに注意してください。
項目 2 については、シリアライズ可能なデータテーブルまたはデータセットを使用することで簡単に解決できます。
単純な「保存」機能を使用するには、.net xmlシリアル化[1]を使用するか、メモリ内のDateSetを作成して、「世界の状態」を適切な数のDateTableに保持します。むしろ、永続化しようとしているオブジェクトモデルがどれほど複雑かによって異なります。
[1]私がすぐに見つけた最も簡単な例(C#、申し訳ありませんが、要点はわかります)http://www.jonasjohn.de/snippets/csharp/xmlserializer-example.htm