[解決済み] JSON.NETにおけるデシリアライズのためのキャスティング・インターフェイス
質問
私は、様々なウェブサイトからJSONオブジェクトを取り込み(情報のスクレイピングを考える)、それらをC#オブジェクトに変換するリーダーをセットアップしようとしています。 現在、デシリアライゼーション処理にJSON.NETを使用しています。 私が遭遇している問題は、クラス内のインターフェースレベルのプロパティを処理する方法を知らないということです。 だから、本質の何か。
public IThingy Thing
エラーを発生させます。
タイプ IThingy のインスタンスを作成できませんでした。タイプはインターフェースまたは抽象クラスであり、インスタンス化できません。
私が取り組んでいるコードは機密性が高く、ユニットテストが非常に重要なので、ThingyではなくIThingyであることが比較的重要なのです。 アトミックなテスト・スクリプトのためのオブジェクトのモッキングは、Thingyのような本格的なオブジェクトでは不可能である。 インターフェイスである必要があります。
JSON.NETのドキュメントをずっと熟読していたのですが、このサイトで見つけられたこの件に関する質問は、すべて1年以上前のものです。 何かいい方法はないでしょうか?
また、もしそれが重要なら、私のアプリは.NET 4.0で書かれています。
どのように解決するのですか?
SamualDavisが素晴らしい解決策を提供しました。 関連質問 ということで、ここにまとめておきます。
JSONストリームをインターフェイスプロパティを持つ具象クラスにデシリアライズする必要がある場合、次のようにします。 そのクラスのコンストラクタのパラメータとして具象クラスをインクルードしてください。 NewtonSoftのデシリアライザーは賢いので、プロパティをデシリアライズするためにそれらの具象クラスを使用する必要があることを理解します。
以下はその例である。
public class Visit : IVisit
{
/// <summary>
/// This constructor is required for the JSON deserializer to be able
/// to identify concrete classes to use when deserializing the interface properties.
/// </summary>
public Visit(MyLocation location, Guest guest)
{
Location = location;
Guest = guest;
}
public long VisitId { get; set; }
public ILocation Location { get; set; }
public DateTime VisitDate { get; set; }
public IGuest Guest { get; set; }
}
関連
-
[解決済み】「The breakpoint will not currently be hit」を改善するには?このドキュメントにはシンボルが読み込まれていません。" という警告はどうすれば改善されますか?
-
[解決済み】URLから画像をダウンロードする方法
-
[解決済み] C#の正しいバージョン番号を教えてください。
-
[解決済み] URLのPath.Combineは?
-
[解決済み] ダイレクトキャスト vs 'as'演算子?
-
[解決済み] C#のインターフェイス。暗黙の実装と明示の実装
-
[解決済み] json.netを使用して、クラス内のプロパティがnullの場合、それを無視する方法
-
[解決済み] JSON.NET エラー タイプの自己参照ループが検出されました。
-
[解決済み] Json.netでシリアライズする際、プロパティ名を変更するにはどうすればよいですか?
-
[解決済み] 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 実装 サイバーパンク風ボタン
おすすめ
-
解決済み] Critical error detected c0000374 - C++ dll returns pointer off allocated memory to C# [解決済み] Critical error detected c0000374 - C++ dll returns pointer off allocated memory to C#.
-
[解決済み】値が期待した範囲に収まらない
-
[解決済み】EF 5 Enable-Migrations : アセンブリにコンテキストタイプが見つかりませんでした
-
[解決済み】ランダムなブーリアンを生成する最速の方法
-
[解決済み】2つ(またはそれ以上)のリストを1つに統合する(C# .NETで
-
[解決済み】URLから画像をダウンロードする方法
-
[解決済み】画像のペイントにTextureBrushを使用する方法
-
[解決済み】ファイルやアセンブリ、またはその依存関係の1つをロードできませんでした。
-
[解決済み] ディープクローンオブジェクト
-
[解決済み] [Solved] JSON.NETでカスタムJsonConverterを実装する方法は?