C# WCF Data Contract Частичный класс - новое поле во 2 -м частичном классе не поднимается

StackOverflow https://stackoverflow.com/questions/4386677

Вопрос

У меня есть услуга 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, не может иметь членов данных. Почему это я понятия не имею, но это стоило мне несколько часов и серьезной головной боли. См. Ссылку ниже:

WCF CollectionDataContract и Datamember

Другие советы

Попробуйте добавить атрибут DataMember в свойство TotalRecords

Я знаю, что это старое, но это продолжало приходить, когда я искал эту тему. Я смог получить эту работу, добавив атрибут «DataMemberAttribute» в свойство. Ниже приведен пример кода.

public partial class SecurityItemCollection
{
    [global::System.Runtime.Serialization.DataMemberAttribute()]
    public int TotalRecords { get; set; }

}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top