WCF Serialization Exception - NetDataContractSeria

2019-06-20 20:41发布

问题:

I am getting an error while trying to send an collection of data over to our service. If however I add only a single item to the collection then it works fines. As soon as I add more then one item I get the following error

The use of type 'SmartTrade.Shared.Common.PaymentTerm' as a get-only collection is not supported with NetDataContractSerializer. Consider marking the type with the CollectionDataContractAttribute attribute or the SerializableAttribute attribute or adding a setter to the property.

So the key thing to note here is that I can send the collection (IList<>) with a single item. I have increased the MaxReceivedMessageSize and the MaxArrayLength to what I think is more then reasonable.

Can anybody help me out here

回答1:

Finally I worked it out. There was a property in one of the base class that only had a getter property and did not have a setter property. So I had to add a setter property



回答2:

An alternative to adding a pointless setter would be to mark the property to be ignored by serialization.

This can be done by decorating your property with System.Runtime.Serialization.IgnoreDataMemberAttribute

Example:

public class Whatever
{
    [IgnoreDataMember] // this won't be serialized now
    public List<string> Things
    {
        get { return _things; }
    }
}