Использование DataContractAttribute и Serializable - PullRequest
3 голосов
/ 23 февраля 2011

У меня есть набор пользовательских типов, которые уже реализуют интерфейс ISerializable, теперь я хотел бы разместить их в приложении на стороне сервера и предоставить некоторые из этих типов клиенту, пометив их атрибутом DataContract.

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

Но в то же время я не могу удалить реализацию ISerializable в старом определяемом пользователем типе.

Кто-то, пожалуйста, помогите мне, как я могу представить эти типы клиенту .. пометив DataContract и не удаляя ISerializable

Спасибо Sandeep

Ответы [ 2 ]

2 голосов
/ 18 марта 2011
1 голос
/ 12 ноября 2012

Из-за управления версиями одно не распознает другое: DataContract знает, что такое ISerializable, но ISerializable понятия не имеет, что такое DataContract

Как насчет создания оболочки?

Затем отправка оболочки для сериализации / десериализации

  [DataContract]
class Person 
{
    public Person()
    {

    }
    public Person(string firstName, string lastName):this()
    {
        this.FirstName = firstName;
        this.LastName = LastName;
    }

    [DataMember]
    public string FirstName {get;set;}

    [DataMember]
    public string LastName { get; set; }

}

   [Serializable]
    class SerializablePersonWrapper : ISerializable 
    {
       SerializablePersonWrapper(SerializationInfo info,
                                 StreamingContext context)
        {
            string fname = info.GetString("FName");

            //did this just for answering any questions
            string lname = (string) info.GetValue("LName", typeof(string)); 

            this.PersonItem = new Person(fname, lname);

        }
       public Person PersonItem {get;set;}

       public void GetObjectData(SerializationInfo info, 
                                 StreamingContext context)
       {
           info.AddValue("FName", this.PersonItem.FirstName);
           info.AddValue("LName", this.PersonItem.LastName);
       }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...