<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE rss PUBLIC "-//Netscape Communications//DTD RSS 0.91//EN" "http://my.netscape.com/publish/formats/rss-0.91.dtd">
<rss version="0.91">
<channel>
<title>「DataContractSerializerを使って、オブジェクトのXMLシリアル化、逆シリアル化を行う」へのコメント</title>
<link>https://dobon.net/cgi-bin/pc/pc.php?mode=v&amp;id=file%2Fdatacontractserializer.html</link>
<description>「DataContractSerializerを使って、オブジェクトのXMLシリアル化、逆シリアル化を行う」に投稿されたコメントの一覧</description>
<language>ja</language>
<image>
<url>https://dobon.net/banner/dbs1.gif</url>
<link>https://dobon.net/cgi-bin/pc/pc.php?mode=v&amp;id=file%2Fdatacontractserializer.html</link>
<title>「DataContractSerializerを使って、オブジェクトのXMLシリアル化、逆シリアル化を行う」へのコメント</title>
<width>88</width>
<height>31</height>
</image>
<item>
<title>通常のコメント</title>
<link>https://dobon.net/cgi-bin/pc/pc.php?mode=v&amp;id=file%2Fdatacontractserializer.html#3</link>
<description><![CDATA[Indentを設定すると改行して保存してくれます<br><br>XmlWriterSettings settings = new XmlWriterSettings();<br>settings.Encoding = new System.Text.UTF8Encoding(false);<br>settings.Indent = true;]]></description>
</item>
<item>
<title>通常のコメント</title>
<link>https://dobon.net/cgi-bin/pc/pc.php?mode=v&amp;amp;id=file%2Fdatacontractserializer.html#2</link>
<description><![CDATA[念のため書いておきますが、CollectionDataContract属性付与のクラスの<br>コンストラクタはデシリアライズ時に呼ばれます<br>(メンバ変数の宣言と初期化をまとめて行っている場合も呼ばれます)。<br><br>逆に、CollectionDataContract属性付与のクラスでOnDeserializing属性や<br>OnDeserialized属性を付けたメンバを用意しても無視されます。<br><br>また、引数なしのコンストラクタがない(他にコンストラクタがない場合は、<br>暗黙的に引数なしのコンストラクタがあるので大丈夫)場合には<br>InvalidDataContractExceptionが発生します。<br><br>さらに言えば、例えばList&lt;string&gt;クラスを継承したhogeクラスに<br>CollectionDataContract属性を付けた場合、要素の追加には<br>Add(string)メソッドが呼ばれ、hogeクラスで同シグネイチャのメンバを<br>定義(new付き)した場合には、それが呼ばれます。]]></description>
</item>
<item>
<title>通常のコメント</title>
<link>https://dobon.net/cgi-bin/pc/pc.php?mode=v&amp;amp;id=file%2Fdatacontractserializer.html#1</link>
<description><![CDATA[とてもわかりやすい記事です。<br>いつもありがとうございます。<br><br><br>デシリアライズ時にコンストラクタを呼ばない、ということについて、私はきちんと理解できていませんでした。<br>同じような勘違いをする人が出ないよう、私が陥った勘違いについて、記しておこうと思います。<br><br>あるシリアライズ対象のクラスが、<br>読み取り専用のメンバ変数を持ち、宣言文で初期化子を指定している場合<br><br>Private ReadOnly m_encName As String = &quot;Shift_JIS&quot;<br><br>このように、一見定数扱いされていそうな変数でも、<br>デシリアライズされた時に、m_encName = Nothing<br>がセットされますね。<br><br>DataMember()属性をつけていないにも関わらず、<br>デシリアライズ時に中身が書き換えられてしまうのはなぜなのか、と最初は悩みました。<br><br>デシリアライズ時にコンストラクタを呼ばない、とはこういうことなのですね。中身が Nothing に書き換わったのではなく、初期化子もセットされないのですね。<br><br>Shared をつければ、保持されるようですが・・・。<br>クラス内で使うだけの定数は Private ReadOnly とする癖が混乱を招いてしまいました。<br>const をつければいいのかな？]]></description>
</item>
</channel>
</rss>