DOBON.NET DOBON.NETプログラミング掲示板過去ログ

vb.netのXMLシリアライズ

環境/言語:[vb.net2008]
分類:[.NET]

こんばんわ。
シリアライズの勉強をしているのですが

XML1
<root>
<grop>
</grop>
<grop>
</grop>
<grop>
</grop>
</root>
このようなXMLをシリアライズしたいのですが

Public Class root
<XmlArrayItem(GetType(grop))> _
Public grops As New List(Of grop)
End Class
と書くと
<root>
<grops>
<grop>
</grop>
<grop>
</grop>
<grop>
</grop>
</grops>
</root>
といった感じに、本来入れたくないタグ<grops>が入ってしまいます。


シリアライズではXML1のような構成でシリアライズすることは不可能でしょうか?
> このようなXMLをシリアライズしたいのですが
XML「に」シリアライズ、ですよね?

配列やリストを直接子要素とする場合に使用するのは XmlElement 属性です。

// でも正直シリアライズする XML の形式を意識する必要があるってのは
// もう XmlSerialzer を使うシーンの外だと思う。
Hongliangさんありがとうございます。

シリアライズというものがイマイチ分ってなくてすみません

> // でも正直シリアライズする XML の形式を意識する必要があるってのは
> // もう XmlSerialzer を使うシーンの外だと思う。
Xmlのシリアライズ及びデシリアライズは、単に Xml⇔クラス を簡単にしてくれるものと理解しています。
なので、Xmlをデータベースのように使う際でもシリアライズで書けば、楽にコードが書けるし、ミスもなくなるので非常に良いと思っているのですが・・・
Xmlのデータベースにシリアライズするとどのような欠点があるのでしょうか?

宜しくお願いします。
プログラム上のオブジェクトは抽象的なものです。その抽象的なものをどうにかしてを保存できる形にするのがシリアライズです。
XmlSerializer は保存する形として XML を使用します。

> Xmlのシリアライズ及びデシリアライズは、単に Xml⇔クラス を簡単にしてくれるものと理解しています。
> なので、Xmlをデータベースのように使う際でもシリアライズで書けば、楽にコードが書けるし、ミスもなくなるので非常に良いと思っているのですが・・・
> Xmlのデータベースにシリアライズするとどのような欠点があるのでしょうか?
オブジェクトの状態をファイルなどに保存するのに XmlSerializer を使うというのはまさに本来の用途です。この用途に使うのなら別に XML の形式がどうなっていようが(groups 要素があろうが無かろうが)問題は無いはずです。
ですが、まず XML が存在し、それをオブジェクトに変換する、というのは「シリアライズ」という観点から見た場合不自然です。
// まあ代替手段というと XmlDocument から要素を一つずつ……ってな地味で汎用性の無いものになったりするんですが。
Hongliangさん度々ありがとうございます。

>この用途に使うのなら別に XML の形式がどうなっていようが(groups 要素があろうが無かろうが)問題は無いはずです。
確かにその通りです。少しXmlの形式にこだわりすぎたようです。
考えてみるとXmlを直接開いて編集はほぼないと思いますので、形式は関係ないですね

>オブジェクトの状態をファイルなどに保存するのに XmlSerializer を使うというのはまさに本来の用途です。
>まず XML が存在し、それをオブジェクトに変換する、というのは「シリアライズ」という観点から見た場合不自然です。
ありがとうございます。良く分りました。

>// まあ代替手段というと XmlDocument から要素を一つずつ……ってな地味で汎用性の無いものになったりするんですが。
それも考えてはいるのですが、やはりテスト等のことを考えると面倒で・・・

どうもありがとうございました。
すみません。締めます。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板