[解決済み] XmlInclude または SoapInclude 属性を使用して、静的に知られていない型を指定します。
質問
.NETの
XmlSerializer
.
次のようなクラス例を考えてみましょう。
public class Order
{
public PaymentCollection Payments { get; set; }
//everything else is serializable (including other collections of non-abstract types)
}
public class PaymentCollection : Collection<Payment>
{
}
public abstract class Payment
{
//abstract methods
}
public class BankPayment : Payment
{
//method implementations
}
を解決する方法は3種類あります。
InvalidOperationException
の派生型についてシリアライザが知らないことが原因です。
Payment
.
1. 追加する
XmlInclude
に
Payment
クラス定義に追加します。
これは、すべてのクラスが、私がコントロールできない外部参照として含まれているため、不可能です。
2. の生成時に派生型の型を渡す。
XmlSerializer
インスタンス
動作しない。
3. 定義する
XmlAttributeOverrides
で説明したように)プロパティのデフォルトのシリアライズを上書きするために、ターゲットプロパティに
このSOポスト
)
もうまくいきません(
XmlAttributeOverrides
の初期化が続く)。
Type bankPayment = typeof(BankPayment);
XmlAttributes attributes = new XmlAttributes();
attributes.XmlElements.Add(new XmlElementAttribute(bankPayment.Name, bankPayment));
XmlAttributeOverrides overrides = new XmlAttributeOverrides();
overrides.Add(typeof(Order), "Payments", attributes);
適切な
XmlSerializer
のコンストラクタが使用されるでしょう。
注
は動作しません。
というのは
InvalidOperationException
(
BankPayment
は想定外でした...。
が投げられます。
どなたか、この問題に光を当てていただけませんか。どのようにして、この問題をさらにデバッグするのでしょうか。
どのように解決するのでしょうか。
ちょうど問題を解決しました。もうしばらく探し回って、見つけたのは このSOの投稿 を見つけました。これは、私を正しい道に導いてくれました。
基本的には
XmlSerializer
はデフォルトの名前空間である
もし
の派生クラスが追加型として含まれる場合、デフォルトの名前空間を知る必要があります。なぜこのようなことが起こるのか、正確な理由はまだ不明ですが、それでもシリアライズは現在動作しています。
関連
-
[解決済み】パディングが無効で、削除できない?
-
[解決済み] 'SubSonic.Schema .DatabaseColumn' 型のオブジェクトをシリアライズする際に、循環参照が検出されました。
-
[解決済み】Socket.Selectがエラー "An operation was attempted on something that is not a socket" を返す。
-
[解決済み】HRESULTからの例外:0x800A03ECエラー
-
[解決済み】ランダムなブーリアンを生成する最速の方法
-
[解決済み】C#のequal to演算子でtextとvarcharのデータ型は互換性がない
-
[解決済み] [Solved] .NETでスレッドの終了を待つには?
-
[解決済み】ファイルやアセンブリ、またはその依存関係の1つをロードできませんでした。
-
[解決済み] なぜList<T>を継承しないのですか?
-
[解決済み] LINQ を使用して、ある List<> にある項目を別の List<> にない項目として取得する。
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] [Solved] 1つ以上のエンティティで検証に失敗しました。詳細は'EntityValidationErrors'プロパティを参照してください [重複]。
-
[解決済み] メンバー '<メンバー名>' にインスタンス参照でアクセスできない
-
[解決済み】C# ASP.NET使用時に「WebClientのリクエスト中に例外が発生しました。
-
[解決済み] [Solved] 不正な文字列値: '\xEFxBFxBD' for column
-
[解決済み】EF 5 Enable-Migrations : アセンブリにコンテキストタイプが見つかりませんでした
-
[解決済み】OnCollisionEnter2Dが実行されない?
-
[解決済み】「namespace」なのに「type」のように使われる。
-
[解決済み】別のスレッドがこのオブジェクトを所有しているため、呼び出し側のスレッドはこのオブジェクトにアクセスできない
-
[解決済み】Nullableオブジェクトは値を持たなければならない?
-
[解決済み] Dictionary メンバを含むクラスをシリアライズする