Top > プログラミング > .NET Tips> オブジェクトの内容をファイルに保存、復元する

オブジェクトの内容をファイルに保存、復元する」への評価、コメント

評価

良い / 悪い = 168 / 5 (「良い」の割合 = 0.971 , 人気度 = 2.173

評価する

コメント一覧


通常のコメント
匿名 2024/03/21 (Thu) 11:09:52
ListがXmlに保存されない...なんでだろう...と悩んで2時間。
よく見たら、publicが付いてなかった。ただ、それだけ...

評価の理由
Ryo 2021/03/29 (Mon) 19:37:33
評価:良い
すばらしいテクニックを教えて下さり感謝に堪えません。読みながら目が丸くなっていました。おかげさまで目的をスマートに実現することができました。

通常のコメント
匿名 2019/11/15 (Fri) 01:39:33
「シリアル化したいオブジェクトが配列やList<T>などのジェネリックコレクションであっても、やり方は全く同じです。」

この説明を冒頭に書いてはどうかと思います。配列について検索すると他のページのシリアル化に行ってしまい遠回りになりました。他の方の記事でもそのようにドボン見てもジェネリックのシリアル化がわからなかったというよなことが書かれてました

通常のコメント
匿名 2018/07/16 (Mon) 15:52:47
これをゲームのセーブとロードに用いるためにはどうしたらよいでしょうか?
変数でセレクト分岐しているのですが、教えて頂きたいです

評価の理由
匿名希望 2018/01/17 (Wed) 16:00:56
評価:良い
このサイト見たら一発で分かりました。
配列を保存するときはループを使わなくてもそのままできました。

通常のコメント
管理人 2014/07/31 (Thu) 01:35:59
> メンバをXML属性として保存するにはXmlTextAttributeを、XMLテキストとして保存するにはXmlAttributeAttributeを使います。
> の部分ですが、Attributeと説明が入れ替わってしまっているように思います。

おっしゃる通りです。次の機会に修正させていただきます。ご報告ありがとうございました。

通常のコメント
lianshi 2014/07/30 (Wed) 14:43:44
いつも本当に助かっています。ありがとうございます。

メンバをXML属性として保存するにはXmlTextAttributeを、XMLテキストとして保存するにはXmlAttributeAttributeを使います。

の部分ですが、Attributeと説明が入れ替わってしまっているように思います。

通常のコメント
管理人 2014/05/11 (Sun) 00:47:48
エンコーディングを明確に指定するようにサンプルを書き換えることにしました。色々なご報告、ありがとうございました。

通常のコメント
匿名 2014/02/23 (Sun) 13:50:00
動作環境のOSの違いがsjisだったりutfだったりしてたりして?

通常のコメント
まるちょう 2013/08/30 (Fri) 16:08:05
>私もShift-JISで書き込まれ、文字化けになったので、対処法を。(VS2012 for Desktop / .NET4.0 / Win8x64)

>Dim serializer As New >System.Xml.Serialization.XmlSerializer(GetType>(SampleClass))
>Dim fs As New System.IO.FileStream("aaa.txt", >System.IO.FileMode.Create)
>Dim enc As Encoding = Encoding.GetEncoding("utf-8")
>Dim sw As New System.IO.StreamWriter(fs, enc)
>serializer.Serialize(sw, sv)
>sw.Close()
>fs.Close()

gan様が提示していただいたコードで私も
utf-8で出力することができました。
感謝いたします。

通常のコメント
管理人 2013/07/28 (Sun) 23:23:10
> 私もShift-JISで書き込まれ、文字化けになったので、

この記事のサンプルではXmlSerializer.Serialize(Stream, Object)を使っていますが、このメソッドの内部ではXmlTextWriter(Stream, Encoding)コンストラクターでXmlTextWriterを作成して、XmlSerializer.Serialize(XmlWriter, Object, XmlSerializerNamespaces, String)を呼び出しているようです。XmlTextWriter(Stream, Encoding)コンストラクターを呼び出す時、2番目の引数にnullを渡しているようですが、MSDNの説明によると、「エンコーディングが null の場合は、ストリームを UTF-8 として書き込み、ProcessingInstruction からエンコーディング属性を省略します。」とされています。これが正しければ、やはりUTF-8で書き込まれるはずなのですが...。もし再現が可能なShift-JISで書き込まれるコードや状況がありましたら、ぜひ教えて下さい。

通常のコメント
gan 2013/07/13 (Sat) 14:33:53
私もShift-JISで書き込まれ、文字化けになったので、対処法を。(VS2012 for Desktop / .NET4.0 / Win8x64)

Dim serializer As New System.Xml.Serialization.XmlSerializer(GetType(SampleClass))
Dim fs As New System.IO.FileStream("aaa.txt", System.IO.FileMode.Create)
Dim enc As Encoding = Encoding.GetEncoding("utf-8")
Dim sw As New System.IO.StreamWriter(fs, enc)
serializer.Serialize(sw, sv)
sw.Close()
fs.Close()

私のとこではうまく行ったので、投稿しときます。

通常のコメント
管理人 2013/07/5 (Fri) 01:36:16
> 「オブジェクトの内容をXMLファイルに保存する」でXMLをutf8で保存するとありますが、FileStreamで作ったテキストはsjisになってしまいます。結果sjisのファイルにutf8で書きこまれ文字化けします。

私が試した限りでは、やはりUTF-8で書き込まれます。

はじめはShift JISで書き込み、途中からUTF-8で書き込むということのようですが(もしShift JISのファイルをUTF-8で上書きしたのであれば、文字化けはしませんので)、これはかなりひどい不具合といってよいでしょう。再現できる状況を教えていただければありがたいです。

通常のコメント
管理人 2013/07/4 (Thu) 21:42:52
> 上記の「メンバをXML属性として保存するにはXmlTextAttributeを、XMLテキストとして保存するにはXmlTextAttributeを使います。」は書き間違いでは?

書き間違えていました。教えていただき、ありがとうございました。

通常のコメント
ふー 2013/03/13 (Wed) 15:43:06
上記の「メンバをXML属性として保存するにはXmlTextAttributeを、XMLテキストとして保存するにはXmlTextAttributeを使います。」は書き間違いでは?

XmlTextAttribute → XmlText、XmlAttribute

評価の理由
mikkon 2011/10/12 (Wed) 08:01:45
評価:良い
とてもわかりやすいです。

通常のコメント
moririring 2011/09/4 (Sun) 09:51:24
非常に参考になりました。ただ1点おかしな挙動になりました。「オブジェクトの内容をXMLファイルに保存する」でXMLをutf8で保存するとありますが、FileStreamで作ったテキストはsjisになってしまいます。結果sjisのファイルにutf8で書きこまれ文字化けします。XmlTextWriterで作ったファイルなら文字コードが指定出来るのでこちらの方がよいかと思います。

評価の理由
tajimaru 2011/01/24 (Mon) 21:07:43
評価:良い
すごく分かりやすかったです。具体例(コード)も簡潔で良かったです。自分のコードに取り入れてみます。

通常のコメント
sakaki777 2010/11/2 (Tue) 16:19:09
XMLシリアライザについて、よく分かりました。
ありがとうです!

通常のコメント
モルァ 2010/05/21 (Fri) 11:38:39
ユーザーが変更可能な設定を読み書きするのにVery Goodです(^^)b
ちなみに、Serialize()ではstatic classは指定できないんですね。これは、xmlファイルをグローバル変数的に使う(その都度xmlファイルを参照する)べきである、ということなんでしょうね。

評価の理由
dbn 2010/04/7 (Wed) 19:11:40
評価:良い
good!

評価の理由
匿名 2010/03/24 (Wed) 02:50:52
評価:良い
とても分かりやすかったです

通常のコメント
匿名 2009/09/20 (Sun) 00:02:22
C#で分からないところを調べてるといつもここにたどり着きます
ありがとうございます

評価の理由
wagner 2009/06/23 (Tue) 19:29:49
評価:良い
すばらしい。助かりました。

評価の理由
mm 2009/03/1 (Sun) 16:42:03
評価:良い
thanx!

評価の理由
brv 2009/02/3 (Tue) 17:31:37
評価:良い
まさに探し求めていたものでした。

通常のコメント
kassyi 2009/01/2 (Fri) 17:13:18
RPGのセーブデーターをどのような方法で保存しようかと迷っていた時にこのページに出会って助かりました。本当にありがとうございました。
これからも、これからもよい記事をよろしくお願いします。

評価の理由
初心者 2008/09/26 (Fri) 10:26:07
評価:良い
すごくわかりやすいです

通常のコメント
bai 2008/09/19 (Fri) 17:02:28
最高ーです!
設定の保存、復元がこんなにも簡単にできるなんて・・・
昔は苦労した記憶があるのですが、楽ちんになってうれしい限りです。

通常のコメント
Tarou 2008/01/23 (Wed) 11:08:27
文字コードUTF-8 以外の文字コードで XML 出力するにはどうすればよいのでしょう?

通常のコメント
peter 2006/07/20 (Thu) 23:25:37
素人なのでなんとなく理解できた程度です。このクラスをどうやって使うのかが、まだ分かりません。まだ勉強が足りないようです。

評価の理由
木下 2006/06/22 (Thu) 23:12:13
評価:良い
説明が分かりやすくすぐに使えた。ありがとうございます

評価の理由
かぼ 2006/01/14 (Sat) 01:27:18
評価:良い
XMLの読み込みを探していたらぴったりでした。
ADO.NETを使用すると思っていたのですが、こんな方法があったのですね。

評価の理由
ななしさん 2005/06/20 (Mon) 14:02:45
評価:良い
蛇足のトコが非常に役に立ちました!ずっと悩んでいたので。。。ありがとぅございます。

評価の理由
Cシャーク 2005/06/13 (Mon) 22:34:49
評価:良い
デシアライズするときに、XMLファイルに該当プロパティがないときは初期値になることが書いてあると尚うれしいです。

通常のコメント
nor 2005/06/3 (Fri) 14:07:26
「制限ユーザー」で動作させるとエラーになりますが。

評価の理由
ミラン 2005/04/8 (Fri) 13:21:34
評価:良い
短くて分かりやすかったです。
文章がもうちょっと短いと良かったです。

評価の理由
ka 2005/03/22 (Tue) 15:50:32
評価:良い
vb6の頃のようにiniファイル読み込みを探しておりました。.netはxmlになったんですね。勉強になります。ありがとうございました。

評価の理由
まこぽん 2005/01/27 (Thu) 19:51:35
評価:良い
XMLの読み書きという点で理解しやすかった

コメントの投稿

[説明]