我有一个名为Organization的对象,它表示名为ORGANIZATION的数据库表中的不同行。有些组织代表商家,商家可以拥有" MerchantAux"记录。
组织类看起来像这样:
[DataContract]
public class Organization : Core.Framework.BaseEntity
{
[Key]
[DataMember]
public int Id { get; set; }
[DataMember]
public string Name { get; set; }
[DataMember]
public virtual MerchantAux MerchantAuxRecord { get; set; }
public Organization()
{
}
}
MerchantAux类看起来像这样:
[DataContract]
public class MerchantAux : BaseEntity
{
[Key]
[DataMember]
public int Code { get; set; }
[DataMember]
public int SettlementDelay { get; set; }
[DataMember]
public Nullable<System.Guid> WalletSiteId { get; set; }
[DataMember]
public bool? AddCardNotPresent { get; set; }
[DataMember]
public bool? BatchEmailNotification { get; set; }
[DataMember]
public string CsvEmailRecipients { get; set; }
[IgnoreDataMember]
public virtual ICollection<Organization> Organizations { get; set; }
public MerchantAux()
{
Organizations = new List<Organization>();
}
}
这些对象在模型程序集中定义。 WCF服务程序集具有ServiceContract和OperationContracts来获取和保存组织。
让组织顺利运作。保存组织失败的结果非常奇怪。
格式化程序在尝试反序列化消息时抛出异常:尝试反序列化参数boardingservice:organization时出错。 InnerException消息是&#39;使用类型&#39; MerchantAux&#39;因为NetDataContractSerializer不支持只获取集合。请考虑使用CollectionDataContractAttribute属性或SerializableAttribute属性标记类型,或者向属性添加setter。&#39;。有关详细信息,请参阅InnerException。
没有内在的例外。
哦是的... Soap UI调用Save方法没有问题,但是.Net客户端会抛出上述错误。有没有其他人看到过这种行为,其中序列化程序认为对象是一个集合?
对于好奇,我确实尝试将其更改为CollectionDataContract,但当然它会立即失败,但有一个例外,即MerchantAux没有实现IEnumerable(duh)。无论如何......任何想法都会很棒。