Проблема сериализации WCF - PullRequest
0 голосов
/ 07 января 2010

Я переключаю генераторы кода для своих бизнес-объектов. Я использовал SQL Metal, но при переходе к генератору набора инструментов T4 сериализация, похоже, перестала работать, и похоже, что они делают одно и то же.

Это свойство, сгенерированное SQL Metal (работает):

[Association(Name="FK_FamilyConfiguration_Family", Storage="_FamilyConfigurations", ThisKey="FamilyID", OtherKey="FamilyID", DeleteRule="CASCADE")]
[DataMember(Order=4, EmitDefaultValue=false)]
public EntitySet<FamilyConfiguration> FamilyConfigurations
{
    get
    {
        if ((this.serializing 
                    && (this._FamilyConfigurations.HasLoadedOrAssignedValues == false)))
        {
            return null;
        }
        return this._FamilyConfigurations;
    }
    set
    {
        this._FamilyConfigurations.Assign(value);
    }
}

и это свойство, сгенерированное панелью инструментов T4 (которое не работает):

[DataMember(Order = 4, EmitDefaultValue = false)]
[Association(Name = "Family_FamilyConfiguration", Storage = "familyConfigurations", ThisKey = "FamilyID", OtherKey = "FamilyID")]
public EntitySet<FamilyConfiguration> FamilyConfigurations
{
    get 
    {
        if (this.serializing && !this.familyConfigurations.HasLoadedOrAssignedValues)
        {
            return null;
        }

        return this.familyConfigurations; 
    }

    set 
    { 
        this.familyConfigurations.Assign(value); 
    }
}

Насколько я могу судить, похоже, что они генерируют почти одно и то же. Однако в последнем коде объект и все его ссылки правильно заполнены (FamilyConfigurations содержит ненулевую запись) на стороне сервера вызова WCF, но к тому времени, когда он достигает клиента, FamilyConfigurations имеет значение null. 1009 *

Я предполагаю, что у меня есть проблема с сериализацией, но я не вижу разницы между двумя сгенерированными свойствами. Возможно, есть что-то еще, что нужно сделать? Сгенерированный класс, членом которого является FamilyConfigurations, имеет тег DataContract под обоими генераторами.

Обновление: FamilyConfigurations имеет значение NULL, это не коллекция, содержащая NULL, как указано ранее.

1 Ответ

1 голос
/ 07 января 2010

Семейная конфигурация изменилась? Я видел разрыв сериализации из-за изменившихся отношений между родителями и детьми. В частности, ребенок не может иметь ассоциации с родителем. Это было бы мое первое предположение, не имея возможности увидеть сами классы.

РЕДАКТИРОВАТЬ: Вы можете написать небольшое консольное приложение, которое сериализует и десериализует ваши объекты, явно используя DataContractSerializer, чтобы выяснить, не является ли сериализация проблемой.

...