Частичный класс контракта данных C # WCF - новое поле во 2-м частичном классе не обнаружено - PullRequest
3 голосов
/ 08 декабря 2010

У меня есть служба WCF, в которой у меня есть несколько договоров на передачу данных.Я использую фабрику программного обеспечения веб-служб, которая использует конструктор для создания всех сообщений, данных и других контрактов и создает их как частичные классы.Когда код генерируется заново, классы воссоздаются.

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; }
}

Кажется, это хорошо работает на стороне службы, но когда я компилирую, а затем обновляюсервисная ссылка от клиента, у класса нет нового свойства, т.е. когда он сериализует его и воссоздает его на стороне клиента, ему не хватает нового свойства.Кто-нибудь знает, почему это?

TIA

РЕДАКТИРОВАТЬ: Хорошо, это официально сводит меня с ума.Единственное, что я вижу, это то, что он использует атрибут CollectionDataContract вместо DataContract.Разве это не позволяет сериализовать элементы данных в классе?С чего бы это?Он хорошо работает на стороне службы - я могу видеть и заполнять значения без проблем.Однако, когда я обновляю ссылку на службу на моем клиенте, ничего нет, только класс colelction без члена данных.

Ответы [ 3 ]

3 голосов
/ 10 декабря 2010

Хорошо, после долгих поисков я наконец-то обнаружил, что это запрещено, то есть классы, помеченные как CollectionDataContract, не могут иметь членов данных.Почему это я понятия не имею, но это стоило мне нескольких часов и большой головной боли.См. Ссылку ниже:

WCF CollectionDataContract и DataMember

3 голосов
/ 08 декабря 2010

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

2 голосов
/ 21 августа 2011

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

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

}
...