「DataContractSerializerを使って、オブジェクトのXMLシリアル化、逆シリアル化を行う」へのコメント http://dobon.net/cgi-bin/pc/pc.php?mode=v&id=file%2Fdatacontractserializer.html 「DataContractSerializerを使って、オブジェクトのXMLシリアル化、逆シリアル化を行う」に投稿されたコメントの一覧 ja https://dobon.net/banner/dbs1.gif http://dobon.net/cgi-bin/pc/pc.php?mode=v&id=file%2Fdatacontractserializer.html 「DataContractSerializerを使って、オブジェクトのXMLシリアル化、逆シリアル化を行う」へのコメント 88 31 通常のコメント http://dobon.net/cgi-bin/pc/pc.php?mode=v&id=file%2Fdatacontractserializer.html#3
XmlWriterSettings settings = new XmlWriterSettings();
settings.Encoding = new System.Text.UTF8Encoding(false);
settings.Indent = true;]]>
Thu, 31 Oct 2019 06:30:59 +0900 http://dobon.net/cgi-bin/pc/pc.php?mode=v&id=file%2Fdatacontractserializer.html#3
通常のコメント http://dobon.net/cgi-bin/pc/pc.php?mode=v&id=file%2Fdatacontractserializer.html#2 コンストラクタはデシリアライズ時に呼ばれます
(メンバ変数の宣言と初期化をまとめて行っている場合も呼ばれます)。

逆に、CollectionDataContract属性付与のクラスでOnDeserializing属性や
OnDeserialized属性を付けたメンバを用意しても無視されます。

また、引数なしのコンストラクタがない(他にコンストラクタがない場合は、
暗黙的に引数なしのコンストラクタがあるので大丈夫)場合には
InvalidDataContractExceptionが発生します。

さらに言えば、例えばList<string>クラスを継承したhogeクラスに
CollectionDataContract属性を付けた場合、要素の追加には
Add(string)メソッドが呼ばれ、hogeクラスで同シグネイチャのメンバを
定義(new付き)した場合には、それが呼ばれます。]]>
Mon, 29 Jan 2018 12:53:19 +0900 http://dobon.net/cgi-bin/pc/pc.php?mode=v&amp;id=file%2Fdatacontractserializer.html#2
通常のコメント http://dobon.net/cgi-bin/pc/pc.php?mode=v&amp;id=file%2Fdatacontractserializer.html#1 いつもありがとうございます。


デシリアライズ時にコンストラクタを呼ばない、ということについて、私はきちんと理解できていませんでした。
同じような勘違いをする人が出ないよう、私が陥った勘違いについて、記しておこうと思います。

あるシリアライズ対象のクラスが、
読み取り専用のメンバ変数を持ち、宣言文で初期化子を指定している場合

Private ReadOnly m_encName As String = "Shift_JIS"

このように、一見定数扱いされていそうな変数でも、
デシリアライズされた時に、m_encName = Nothing
がセットされますね。

DataMember()属性をつけていないにも関わらず、
デシリアライズ時に中身が書き換えられてしまうのはなぜなのか、と最初は悩みました。

デシリアライズ時にコンストラクタを呼ばない、とはこういうことなのですね。中身が Nothing に書き換わったのではなく、初期化子もセットされないのですね。

Shared をつければ、保持されるようですが・・・。
クラス内で使うだけの定数は Private ReadOnly とする癖が混乱を招いてしまいました。
const をつければいいのかな?]]>
Fri, 03 May 2013 01:46:47 +0900 http://dobon.net/cgi-bin/pc/pc.php?mode=v&amp;id=file%2Fdatacontractserializer.html#1