WCF InvalidDataContractException:" Type无法序列化"但标记正确

时间:2015-11-24 13:09:19

标签: c# wcf serialization datacontract datamember

我收到InvalidDataContractException:

  

Type' LicenseWatchingServiceLibrary.LicenseInfoContainerExpiring'无法序列化。考虑标记它[...]

但它已被标记(见代码)。我已经搜索过了,但我找到的解决方案都没有。此处使用WCF在Windows服务和ui应用程序之间进行通信。一些代码:

抛出异常的位,位于windows wcf服务应用程序中:

setMinimumSize

类库中的接口

private void Run()
    {
        //[...]

        List<LicenseInfoContainerExpiring> expiringLicenses;
        List<LicenseInfoContainerUntrusted> untrustedLicenses;
        readLicenseInfoLists(out expiringLicenses, out untrustedLicenses, out warningNeeded);
        if (warningNeeded)
        {
            LWSProxy.WatchLicenses(expiringLicenses, untrustedLicenses); //breaks here
        }
    }

LicenseInfoContainerExpiring.cs,也位于类库中:(所有这些,以防万一我忘了某些地方)

[ServiceContract]
public interface ILicenseWatchingServiceUXHost
{
    [OperationContract]
    void WatchLicenses(List<LicenseInfoContainerExpiring> elcs, List<LicenseInfoContainerUntrusted> ulcs);
}

2 个答案:

答案 0 :(得分:1)

您拥有私人制定者的数据成员。然后,无法在反序列化时设置其值。让公司也公开。

请记住,数据协定实例化后甚至不会在反序列化时调用默认构造函数。

namespace LicenseWatchingServiceLibrary
{
    [DataContract]
    public partial class LicenseInfoContainerExpiring : ILicenseInfoContainer
    {
        #region precode

        #region properties
        [DataMember]
        public string licenseName { get; set; } 
        [DataMember]
        public DateTime licenseExpirationDate { get; set; }

        // ...
    }
}

答案 1 :(得分:0)

添加KnownType:

[DataContract]
[KnownType(typeof(GregorianCalendar))]
public partial class LicenseInfoContainerExpiring : ILicenseInfoContainer
{}