用WCF的DataContract/Data成员序列化对象
本文关键字:成员 序列化 对象 Data WCF DataContract | 更新日期: 2023-09-27 17:54:42
我正在尝试序列化我的数据层对象。这些是具有属性、方法和对象集合的复杂对象。
所有的类都继承自一个被序列化的基类。
[DataContract]
[KnownType(typeof(Person))]
[KnownType(typeof(Client))]
[KnownType(typeof(Professional))]
[KnownType(typeof(ProfessionalApptHistory))]
[KnownType(typeof(DailySchedule))]
[KnownType(typeof(Option))]
[KnownType(typeof(PersonType))]
[KnownType(typeof(ProfessionClientInteractionType))]
[KnownType(typeof(ProfessionalClientInteractions))]
[KnownType(typeof(ProfessionalCalendar))]
public abstract class CMBase
{
protected designs3_OurTimeEntities _entities = new designs3_OurTimeEntities();
[DataMember()]
public abstract bool IsPersisted { get; internal set; }
}
我有一个person类它也被序列化了
[DataContract(Name = "Person")]
[KnownType(typeof(Professional))]
[KnownType(typeof(Client))]
public abstract class Person : CMBase
{
[DataMember()]
public int PersonId { get; internal set; }
[DataMember()]
public int PersonTypeId { get; set; }
[DataMember()]
public string Name { get; set; }
[DataMember()]
public string ContactNumber { get; set; }
[DataMember()]
public string ImageLocation { get; set; }
[DataMember()]
public Bitmap Image { get; internal set; }
[DataMember()]
public Guid MembershipUserId { get; internal set; }
[DataMember()]
public DateTime? ActivationStartDate { get; internal set; }
[DataMember()]
public string Email { get; internal set; }
[DataMember()]
public string Zip { get; set; }
[DataMember()]
public bool ShowDefaultPage { get; set; }
[DataMember()]
public bool IsClient { get; internal set; }
[DataMember()]
public override bool IsPersisted
{
get
{
if (this.PersonId == 0)
{
return false;
}
else
{
return true;
}
}
internal set
{
throw new NotImplementedException();
}
}
…}
那么这个类没有被序列化
[DataContract(Name = "Professional")]
public class Professional : Person
{
[DataMember()]
public DateTime DateStartedInProfession { get; set; }
[DataMember()]
public int? ShopId { get; set; }
[DataMember()]
public DateTime LastPayment { get; set; }
[DataMember()]
public DateTime NextPaymentDate { get; set; }
[DataMember()]
public DateTime TerminationDate { get; set; }
[DataMember()]
public int? Rating { get; internal set; }
[DataMember()]
public bool hasSystemAccess { get; internal set; }
[DataMember()]
public List<SaveResult> SaveResults { get; internal set; }
...
}
我还有其他没有被序列化的类,我不知道发生了什么
看一下如何序列化一个可空的int
它有一些你可以遵循的方法
对于迟到的访客(就像我一样):继承是问题所在,如下所述:在接口中定义序列化数据成员,然后在实现该接口的类中使用它
如果Person
是一个接口,而Profession
将实现该接口,那将工作。这是因为属性DataMember
不能被继承。
变化
[DataMember()]
public int? ShopId { get; set; }
[DataMember()]
public Nullable<int> ShopId { get; set; }
我确定Nullable被序列化了,但我不是100%确定这是你唯一的问题