- PR -

XmlSerializerについて(VB2005)

1
投稿者投稿内容
みか
会議室デビュー日: 2007/03/07
投稿数: 12
投稿日時: 2007-07-24 14:07
こんにちは。
XmlSerializerについての質問です。
ArrayList内に、あるクラスの派生クラスがいくつか入っています。
ArrayListに <XmlArrayItem(Type:=GetType(CBase))>
と、派生クラスのベースクラスをタイプとして指定したところ、
シリアル化の際に、
「型 CClass は指定されていません。スタティックに使用できない型を指定するには XmlInclude または SoapInclude 属性を使ってください。」
というエラーが出てしまいます。
http://www.weblio.jp/content/XmlIncludeAttribute+%E3%82%AF%E3%83%A9%E3%82%B9
ネットで検索してなどのページを読んだのですが、正直に言って、よく理解できません。
ArrayList内に複数の型のクラスが入っている場合、どのようにすれば、シリアル化(デシリアル化)できるのでしょうか。
よろしくお願いします。

burton999
ぬし
会議室デビュー日: 2003/10/06
投稿数: 898
お住まい・勤務地: 東京
投稿日時: 2007-07-24 14:20
@IT:連載:.NETで簡単XML 第11回 オブジェクトをXMLでシリアライズ(3)
http://www.atmarkit.co.jp/fdotnet/easyxml/easyxml11/easyxml11_01.html
みか
会議室デビュー日: 2007/03/07
投稿数: 12
投稿日時: 2007-07-24 15:23
こんいちは。
ご返答ありがとうございます。
プロパティとしてArrayListを返しているところに、
<XmlArrayItem(Type:=GetType(CClass1)), XmlArrayItem(Type:=GetType(CClass2))>
のように、ArrayList内に収まるクラスの型を書き綴り、実行してみたところ、
「AryCls 型のオブジェクトのシリアル化を実行中に循環参照が見つかりました。」
とのエラーが出るようになってしまいました。
どうしたらよいのでしょうか。
すいません。頼りっぱなしで。
burton999
ぬし
会議室デビュー日: 2003/10/06
投稿数: 898
お住まい・勤務地: 東京
投稿日時: 2007-07-24 16:11
エラーメッセージが言ってるように
シリアル化しようとしているCClass1かCClass2に循環参照があるんじゃないでしょうか?
みか
会議室デビュー日: 2007/03/07
投稿数: 12
投稿日時: 2007-07-24 16:57
ありがとうございます。
>シリアル化しようとしているCClass1かCClass2に循環参照があるんじゃないでしょうか?
プログラム自体は正常に動くのですが、
おそらくそうなってしまっているのだろうと思います。
PublicなPropertyでシリアル化させたくない場合は、
どのようにすればよいのでしょうか。
すいません。次から次へと質問ばかりで。

みか
会議室デビュー日: 2007/03/07
投稿数: 12
投稿日時: 2007-07-24 17:02
すいません。
自己レスです。
NonSerialized以外にも、XmlIgnoreというのがあるんですね。
1

スキルアップ/キャリアアップ(JOB@IT)