私は基本クラスBaseClass
と派生クラスをDerivedClass
2 つの異なるアセンブリに持っています。DerivedClass
次のメソッド (T= BaseClass
)を使用してのインスタンスをシリアル化しています。
public static string SerializeDataContract<T>(T obj)
{
using (var stream = new MemoryStream())
{
using (var reader = new StreamReader(stream))
{
var serializer = new DataContractSerializer(typeof(T));
serializer.WriteObject(stream, obj);
stream.Position = 0;
return reader.ReadToEnd();
}
}
}
次の例外が発生しました: SerializationException : 既知の型のリストに静的に不明な型を追加します。たとえば、KnownTypeAttribute 属性を使用するか、DataContractSerializer に渡される既知の型のリストにそれらを追加します。
DerivedClass
Serialization メソッドを変更せずにのインスタンスをシリアル化するにはどうすればよいですか? (覚えておいてください: DerivedClass は他のアセンブリにあります)
私は現在以下を使用していますが、私は大ファンではありません。いくつかのアイデア?
//In base class
[KnownType("GetKnownType")]
public abstract class GetcReceiverContextBase
{
public static event Func<IEnumerable<Type>> KnownTypeRequired;
private static IEnumerable<Type> GetKnownType()
{
var types = new List<Type>();
if (KnownTypeRequired != null)
return KnownTypeRequired();
return types.ToArray();
}
//In derived Class
public class DerivedClass : BaseClass
{
static MT514ContextMock()
{
KnownTypeRequired += () => new List<Type> { typeof(MT514ContextMock) };
}