アセンブリ A:
[DataContract]
public class Base
{
[DataMember]
public string SomeText { get; set; }
}
アセンブリ B:
internal class Helper
{
internal static Base Deserialize(string serializedInstanceOfTypeBase)
{
DataContractSerializer serializer = new DataContractSerializer(typeof (Base));
XmlReader reader = XmlReader.Create(new StringReader(serializedInstanceOfTypeBase));
return (Base)serializer.ReadObject(reader);
}
}
アセンブリ C:
[DataContract]
public class Derived : Base
{
[DataMember]
public string SomeMoreText { get; set; }
}
タイプのインスタンスをシリアル化Derived
してメソッドに渡すと、次Helper.Deserialize()
のエラーで失敗しますSerializationException
。
行 1 の位置 2 にエラーがあります。名前空間 'http://schemas.datacontract.org/2004/07' から要素 'Base' が必要です.. 名前が 'Derived'、名前空間 'http://schemas.datacontract' の 'Element' が見つかりました.org/2004/07'.
どうすればこの問題を解決できますか?
属性は認識していKnownType
ますが、アセンブリ A と B でコーディングする時点では、その派生型はまったく認識していません。だから私はその解決策を使うことができません。
私の製品のデザインはより複雑で、ここに完全に掲載することはできません. Helper.Desrialize()
メソッドはstring
引数を取得するだけです。Base
実行時であっても、アセンブリ A または B がクラスの派生型について知る方法は (少なくとも現時点では) ありません。
アセンブリ B はアセンブリ A を参照しますが、A & B はアセンブリ C を参照できません。
C#4.0を使用しています。提供するソリューションが を使用していなくても問題ありませんDataContractSerializer
。