c# - 使用 WCF 的 DataContract/Data 成员序列化对象

标签 c# .net wcf serialization

我正在尝试序列化我的数据层对象。这些是具有属性、方法和对象集合的复杂对象。

所有类都继承自序列化的基类。

    [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; }
...
}

我还有其他未序列化的类,我不明白发生了什么。

最佳答案

看看Serialize a nullable int

它有一些您可以遵循的方法。

关于c# - 使用 WCF 的 DataContract/Data 成员序列化对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5872225/

相关文章:

C# 基本类型(double、int 等)和 Struct 差异

c# - 如何使用 Lazy<StackFrame> 创建可预测的输出

.net - ASP.NET 配置文件版本控制?

c# - 如何处理 C# .NET GET/POST?

mysql - WCF:从 Oracle 10g、MySQL 和 SQL Server 2008 数据库获取数据的最佳方式?

c# - 为什么 WCF 服务每次请求都会返回错误的值?

c# - 如何从分组但仍按标题顺序返回表中的数据?

c# - 如何使用可选参数从 C# 调用用 VB.NET 编写的方法

c# - 由于使用 nunit 测试,Monodevelop 在 Windows 上崩溃特点

c# - 同时在 JSON 和 XML 中用于 WCF 的 ResponseFormat?