Я использую C # и WCF для веб-сервисов.У меня есть переменная-член класса, который реализует IEnumerable.Я попытался сериализовать его как часть моего контракта на данные, выполнив:
[DataContract]
class Item
{
[DataMember]
private IEnumerable<KeyValuePair<string, object>> Member1
{
get { return this._Properties; }
set { this._Properties = Value; }
}
}
Где _Properties имеет тип:
class PropertiesCollection:IEnumerable<KeyValuePair<string, object>>
{
...
}
Я думал, что WCF будет сериализовать Member1 как IEnumerableпотому что это тип, который я дал этому члену, но я получаю InvalidDataContractExceptiom с этим сообщением:
Тип PropertyCollection не может быть сериализован.Попробуйте пометить его атрибутом DataContractAttribute и пометить все его элементы, которые вы хотите сериализовать, атрибутом DataMemberAttribute.Если тип является коллекцией, попробуйте пометить его с помощью CollectionDataContractAttribute.Информацию о других поддерживаемых типах см. В документации Microsoft .NET Framework.
Кажется, что WCF смотрит на тип времени выполнения объекта, передаваемого через Member1 (PropertyCollection), а не на тип свойства (IEnumenable),Это понимание правильно?Единственное исправление, добавляющее [CollectionDataContract] к PropertiesCollection?Я бы предпочел указывать контракт на обслуживание неконкретным (т. Е. Он просто знает, что iot является IEnumerable), если это возможно.