Newtonsoft JSON.NETでJSONをIEnumerable<BaseType>にデシリアライズする方法
2023-10-25 21:55:14
質問
このJSONが与えられた場合。
[
{
"$id": "1",
"$type": "MyAssembly.ClassA, MyAssembly",
"Email": "[email protected]",
},
{
"$id": "2",
"$type": "MyAssembly.ClassB, MyAssembly",
"Email": "[email protected]",
}
]
とこれらのクラスがあります。
public abstract class BaseClass
{
public string Email;
}
public class ClassA : BaseClass
{
}
public class ClassB : BaseClass
{
}
JSONをどのようにデシリアライズすればよいのでしょうか。
IEnumerable<BaseClass> deserialized;
を使うことはできません。
JsonConvert.Deserialize<IEnumerable<BaseClass>>()
という文句が出るので
BaseClass
が抽象的であると文句を言うからです。
どのように解決するのですか?
必要です。
JsonSerializerSettings settings = new JsonSerializerSettings
{
TypeNameHandling = TypeNameHandling.All
};
string strJson = JsonConvert.SerializeObject(instance, settings);
ということで、JSONは以下のようになります。
{
"$type": "System.Collections.Generic.List`1[[MyAssembly.BaseClass, MyAssembly]], mscorlib",
"$values": [
{
"$id": "1",
"$type": "MyAssembly.ClassA, MyAssembly",
"Email": "[email protected]",
},
{
"$id": "2",
"$type": "MyAssembly.ClassB, MyAssembly",
"Email": "[email protected]",
}
]
}
そして、デシリアライズします。
BaseClass obj = JsonConvert.DeserializeObject<BaseClass>(strJson, settings);
ドキュメンテーション TypeNameHandlingの設定
関連
-
[解決済み] なぜList<T>を継承しないのですか?
-
[解決済み] JSONをC#のダイナミックオブジェクトにデシリアライズする?
-
[解決済み] ASP.NETでJSONを単純なDictionary<string,string>にデシリアライズするにはどうすればよいですか?
-
[解決済み] json.netを使用して、クラス内のプロパティがnullの場合、それを無視する方法
-
[解決済み] Json.netを使用してJSONオブジェクトを動的オブジェクトにデシリアライズする。
-
[解決済み] 空のIEnumerableを返すにはどうしたらいいですか?
-
[解決済み] .NET NewtonSoft JSONのデシリアライズマップを異なるプロパティ名に変更する。
-
[解決済み] [Solved] JSON.NETでカスタムJsonConverterを実装する方法は?
-
[解決済み] JSON配列(例: [1,2,3])をtype ' ' にデシリアライズできない。typeはJSONオブジェクト(例: {"name": "value"}) を必要とするので、正しくデシリアライズされない。
-
[解決済み] json.netを使った型情報を持たない多相なjsonクラスのデシリアライズ
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】C#におけるtypedefの等価性
-
[解決済み】パディングが無効で、削除できない?
-
[解決済み】「namespace x already contains a definition for x」エラーの修正方法は?VS2010にコンバートした後に発生しました。
-
[解決済み】ORA-01008: すべての変数がバインドされていません。これらはバインドされています。
-
[解決済み】なぜこのコードはInvalidOperationExceptionを投げるのですか?
-
[解決済み】Socket.Selectがエラー "An operation was attempted on something that is not a socket" を返す。
-
[解決済み】ファイルへの読み書きの際に共有違反のIOExceptionが発生する C#
-
[解決済み】別のスレッドがこのオブジェクトを所有しているため、呼び出し側のスレッドはこのオブジェクトにアクセスできない
-
[解決済み] [Solved] JSON.NETでカスタムJsonConverterを実装する方法は?
-
[解決済み] Json.netは派生型をシリアライズ/デシリアライズするのか?