C# WCF Data Contract Частичный класс - новое поле во 2 -м частичном классе не поднимается
-
10-10-2019 - |
Вопрос
У меня есть услуга WCF, в которой у меня есть некоторые контракты на данные. Я использую Factory программного обеспечения для веб -службы, которая использует дизайнер для создания всех сообщений, данных и других контрактов, и это создает их как частичные классы. Когда код регенерирован, классы воссоздаются.
using WcfSerialization = global::System.Runtime.Serialization;
[WcfSerialization::CollectionDataContract(Namespace = "urn:CAEService.DataContracts", ItemName = "SecurityItemCollection")]
public partial class SecurityItemCollection : System.Collections.Generic.List<SecurityItem>
{
}
Контракт на данные представляет собой общий список пользовательского класса, который работал нормально. Однако теперь я хочу добавить свойство в этот класс, поэтому я добавил этот частичный класс в одном и том же пространстве имен:
public partial class SecurityItemCollection
{
public int TotalRecords { get; set; }
}
Похоже, что это прекрасно работает на стороне обслуживания, но когда я компилируюсь, а затем обновляю ссылку на обслуживание от клиента, у класса нет нового свойства, т.е., когда он сериалирует, и воссоздает его на стороне клиента, ему не хватает нового имущество. Кто -нибудь знает, почему это?
Тиа
РЕДАКТИРОВАТЬ: ОК, это официально сводит меня с ума. Единственное, что я вижу, это то, что он использует атрибут CollectionDataContract вместо обработки данных. Разве это каким -то образом не позволяет сериализованным членам данных в классе? Почему это будет? Он работает нормально на стороне обслуживания - я вижу и заполняю значения без проблем. Однако, когда я обновляю ссылку на службу на мой клиент, ничего нет, только класс Colelction без члена данных.
Решение 2
ОК после долгих поисков я наконец узнал, что это не допускается классов IE, помеченных как CollectionDataContract, не может иметь членов данных. Почему это я понятия не имею, но это стоило мне несколько часов и серьезной головной боли. См. Ссылку ниже:
Другие советы
Попробуйте добавить атрибут DataMember в свойство TotalRecords
Я знаю, что это старое, но это продолжало приходить, когда я искал эту тему. Я смог получить эту работу, добавив атрибут «DataMemberAttribute» в свойство. Ниже приведен пример кода.
public partial class SecurityItemCollection
{
[global::System.Runtime.Serialization.DataMemberAttribute()]
public int TotalRecords { get; set; }
}