Почему я не могу использовать WCF DataContract и ISerializable на том же классе?

У меня есть класс, который я должен смочь сериализировать к переменной сеанса SQLServer и быть доступным по Сервису WCF. Я объявил это следующим образом

namespace MyNM
{
[Serializable] 
[DataContract(Name = "Foo", Namespace = "http://www.mydomain.co.uk")]

public class Foo : IEntity, ISafeCopy
{
    [DataMember(Order = 0)] 
    public virtual Guid Id { get; set; }

    [DataMember(Order = 1)] 
    public virtual string a { get; set; }

    DataMember(Order = 2)]
    public virtual Bar c { get; set; }

    /* ISafeCopy implementation */
}


[Serializable]
[DataContract(Name = "Bar ", Namespace = "http://www.mydomain.co.uk")]
public class Bar : IEntity, ISafeCopy
{
    #region Implementation of IEntity

    DataMember(Order = 0)]
    public virtual Guid Id { get; set; }
    [DataMember(Order = 1)]
    public virtual Baz y { get; set; }

    #endregion

    /* ISafeCopy implementation*/
}


[Serializable]
[DataContract]
public enum Baz
{
    [EnumMember(Value = "one")]
    one,
    [EnumMember(Value = "two")]
    two,
    [EnumMember(Value = "three")]
    three
}

Но когда я пытаюсь назвать этот сервис, я получаю следующую ошибку в журнале трассировки.

"Система. Время выполнения. Сериализация. InvalidDataContractException: Тип 'BarProxybcb100e8617f40ceaa832fe4bb94533c' не может быть ISerializable и сделать, чтобы DataContractAttribute приписал".

Если я вынимаю сериализуемый атрибут, сервисные работы WCF, но когда объект не может быть сериализирован к сессии. Если я удаляю атрибут DataContract из класса Панель, сервисное высказывание сбоев WCF

Тип 'BarProxy3bb05a31167f4ba492909ec941a54533' с названием контракта данных 'BarProxy3bb05a31167f4ba492909ec941a54533:http://schemas.datacontract.org/2004/07 /' не ожидается. Добавьте, что любые типы, не известные статически списку известных типов - например, при помощи атрибута KnownTypeAttribute или путем добавления их к списку известных типов, передали DataContractSerializer

Я попытался добавить, что KnownType приписывает классу нечто

[KnownType(typeof(Bar))]

Но я все еще получаю ту же ошибку.

Кто-либо может выручить меня с этим?

Большое спасибо

Dave

11
задан marc_s 17 March 2010 в 10:41
поделиться

1 ответ

Этот вопрос по MSDN может помочь: DataContract против Serializable .

Принятый ответ из этой цепочки:

  1. [DataContract ] и [Serializable] можно использовать вместе.

  2. DataContractSerializer понимает их оба. Если тип отмечен обоими из них, он будет иметь проекцию [DataContract]

  3. Вот документы по передаче данных и сериализации в WCF, которые предоставляют много подробностей о сериализаторах и известный тип: Передача данных и сериализация

8
ответ дан 3 December 2019 в 10:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: