Я работаю с простым объектом в WCF, украшенным атрибутами DataContract
и DataMember
. У меня есть свойство List<T>
, и я специально разработал его для создания экземпляра вспомогательного поля при первом доступе (если он нулевой). Сокращенная версия класса приведена ниже.
[DataContract]
public class FieldSetData
{
private List<FormFieldData> _formFields;
[DataMember]
public List<FormFieldData> FormFields
{
get
{
if (this._formFields == null)
{
this._formFields = new List<FormFieldData>();
}
return this._formFields;
}
set
{
this._formFields = value;
}
}
}
Проблема в том, что в сгенерированном классе клиент / прокси я не могу получить доступ к свойству, не создав его вручную в первый раз, потому что оно нулевое (что и должно было обрабатывать логика if
выше). *
Вторая строка кода ниже возвращает ноль:
//proxy class version
FieldSetData data = new FieldSetData();
data.FormFields.Add(new FormFieldData()); //FormFields property is null
Вместо этого я должен сделать это:
//instantiate the List<T> property
FieldSetData data = new FieldSetData { FormFields = new List<FormFieldData>() };
data.FormFields.Add(new FormFieldData());
Я довольно новичок в WCF, так что, возможно, я что-то здесь упускаю? Я полагал, что генерация прокси-класса будет соблюдать логику if
в свойстве DataMember
?
Я просто использую встроенные в VS 2010 инструменты WCF для генерации прокси-классов и т. Д. И не попал в пользовательскую сериализацию.
Любое понимание будет оценено!