Я знаю об этой проблеме при создании пользовательских коллекций, наследуемых от List<T>
или ICollection<T>
с дополнительными пользовательскими свойствами:WCF сериализация и IEnumerable <T> против ICollection <T> наследства
public class MyCollection: List<int>
{
public string MyCustomProperty { get; set; }
}
Насколько я знаю, такая коллекция будет принята в два WCF поскольку ArrayOfInt и WCF не будут сериализовать мое настраиваемое свойство. Решением является создание класса-оболочки, который будет управлять коллекцией внутри и будет иметь настраиваемое свойство.
Я хочу сделать более приятным обходным путем для своих нужд ... IEnumerable<T>
будет иметь такую же проблему?
public class MyCollection: IEnumerable<int>
{
/**************/
/* Code that implements IEnumerable<int> and manages the internal List<T> */
/* I know I will not able to cast it to List<T>, but I don't need it. */
/* If I will need it, I will implement cast operators later */
/**************/
public string MyCustomProperty { get; set; }
}
Будет ли класс выше пройденным броском WCF включать значение MyCustomProperty?
Благодаря
Но после того, как вы пометили его как DataMember, оно возвращает пользовательское свойство, поэтому оно является решением, так как с ICollection свойство не проходит, даже если оно помечено как DataMember. –
Кстати, я считаю, что если класс будет отмечен как Serializable, а не DataContract, он будет работать даже с ICollection, но я еще не тестировал его. –
И я считаю, что вы создаете свойство для списка, чтобы иметь возможность его отмечать DataMember, поскольку частные поля не сериализованы с помощью DataContract. Или я ошибаюсь? –