使用DataContractAttribute和Serializable

时间:2011-02-23 02:27:38

标签: wcf

我有一组已经实现ISerializable接口的用户定义类型,现在我想在服务器端应用程序中托管它们,并通过用DataContract属性标记它们,将这些类型中的一些暴露给客户端。

不幸的是,当我无法使用DataContract属性标记同一个类时,因为它已经是ISerializable并且它会导致运行时异常。

但与此同时,我无法删除旧用户定义类型中的ISerializable实现。

有人请帮助我如何将这些类型公开给客户端..通过标记DataContract而不删除ISerializable

由于 和Sandeep

2 个答案:

答案 0 :(得分:2)

答案 1 :(得分:1)

由于版本控制,人们无法识别另一个: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);
       }
    }