スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
当サイトは基本をすっ飛ばしてます。基本文法等は、@ITをどうぞ
カテゴリー: スポンサー広告

JSON形式でオブジェクトをシリアライズする

自分が作ったクラスの情報等をファイルに出力したい時、たいていはシリアライズを行なってファイルに出力した。C#1.1の頃なんかは、XML形式へシリアライズ、あるいはバイナリ形式へシリアライズくらいしかなかった。
.NET3.5くらいからかな、JSON形式へのシリアライズが可能になった。
JSON自身は、別にC#に限った話ではない。でもそれなりに関わるもの。
最近、JSON形式でシリアライズしてみようと思って、とあるクラスを出力してみようと思ったんだけど、シリアライズできなかった。
おかしい。ちゃんと属性(Attribute)つけてるのに。

using System.Runtime.Serialization;

[DataContract]
public class ConcreteClass : BaseClass {

/// <summary>
/// コンストラクタ
/// </summary>
public ConcreteClass() : base() {
}


[DataMember]
public string KeyCode {
get; set;
}
}

実行時エラーになって、落ちてしまう。
なぜだ?と思ってエラー内容を見てみれば、BaseClassにDataContract属性がついてないからできない、と書いてある。
ちょっと待てい。それはダメなのか?ダメなんだ。ああもう、しょうがない・・・Orz。
なお、シリアライズしてファイルに出力メソッドは、↓のような感じになった。

using System;
using System.Runtime.Serialization;
using System.IO;

/// <summary>
/// 指定されたオブジェクトをJSON形式でシリアライズし、指定のファイルに保存します。<br/>
/// </summary>
/// <typeparam name="T">出力対象の型宣言</typeparam>
/// <param name="srcObj">出力対象</param>
/// <param name="filePath">出力先ファイルパス</param>
/// <exception cref="ArgumentNullException">引数(srcObj)がnull</exception>
/// <exception cref="InvalidOperationException">引数(srcObj)がシリアライズできない</exception>
public static void SerializeToJson<T>(T srcObj, string filePath) {
//シリアライザセット
var serializer =
new System.Runtime.Serialization.Json.DataContractJsonSerializer(srcObj.GetType());

using (MemoryStream memStr = new MemoryStream()) {
serializer.WriteObject(memStr, srcObj);
string json = Encoding.UTF8.GetString(memStr.ToArray());
File.WriteAllText(filePath, json);
}
}

なお、System.Runtime.Serialization.dllへの参照が必要になる。
スポンサーサイト
当サイトは基本をすっ飛ばしてます。基本文法等は、@ITをどうぞ
カテゴリー: C# | コメント: 0 | トラックバック: 0


この記事へのコメント

コメントの投稿

非公開コメント


サイドバー背後固定表示サンプル

当ブログに書かれたソースコードは流用自由です。

バグ、スペルミス等はありうる事です。

ご利用の際は自己責任でお願いしますm(_ _)m

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。