我有一个名为RSummary的类,用于通过DataContractSerializer进行串行化。 它具有名为submitted和Saved的属性,它们是DInfo类的对象。 我在数据库中有xml格式的记录,类型为RSummary。 在序列化这些xml记录时,我在数据库中有一些xml记录(旧记录),这些记录使用来自命名空间ABC.Domain.Contract.Base的DInfo类和来自命名空间ABC.Common.Contract的一些记录(新记录)。
namespace ABC.Domain.Contract.Base
{
public class RSummary
{
public Guid ID { get; set; }
public DInfo Submitted { get; set; }
public DInfo Saved { get; set; }
}
}
namespace ABC.Domain.Contract.Base
{
public class DInfo
{
public DateTime? Date { get; set; }
public UserRef User { get; set; }
}
}
namespace ABC.Common.Contract
{
public class DInfo
{
public DateTime? Date { get; set; }
public UserRef User { get; set; }
}
}
我可以做些什么来使反序列化适用于两种类型的记录,即新旧记录。 我试过但没有运气
namespace ABC.Domain.Contract.Base
{
public class RSummary
{
public Guid ID { get; set; }
public ABC.Common.Contract.DInfo Submitted { get; set; }// new record should be parsed here
[DataMember(Name = "Submitted")]
public ABC.Domain.Contract.Base.DInfo SubmittedOld { get; set; }// old record should be parsed here
public ABC.Common.Contract.DInfo Saved { get; set; }
[DataMember(Name = "Saved")]
public ABC.Domain.Contract.Base.DInfo SavedOld { get; set; }
}
}
用于反序列化的代码是
public static T Deserialize<T>(string typeName, string data)
{
System.Diagnostics.Contracts.Contract.Requires(typeName != null);
var type = Type.GetType(typeName);
var ser = new DataContractSerializer(type, null, Int32.MaxValue, false, false, null, new SharedTypeResolver());
var ms = new MemoryStream(Encoding.UTF8.GetBytes(data));
ms.Seek(0, SeekOrigin.Begin);
return (T)ser.ReadObject(ms);
}
这里typeName是我们反序列化的对象类型,即RSummary