我有一组已经实现ISerializable接口的用户定义类型,现在我想在服务器端应用程序中托管它们,并通过用DataContract属性标记它们,将这些类型中的一些暴露给客户端。
不幸的是,当我无法使用DataContract属性标记同一个类时,因为它已经是ISerializable并且它会导致运行时异常。
但与此同时,我无法删除旧用户定义类型中的ISerializable实现。
有人请帮助我如何将这些类型公开给客户端..通过标记DataContract而不删除ISerializable
由于 和Sandeep
答案 0 :(得分:2)
明确禁止此操作 - 请参阅http://blogs.msdn.com/b/sowmy/archive/2006/05/14/597476.aspx和http://blogs.msdn.com/b/sowmy/archive/2006/02/22/536747.aspx以获取澄清。
答案 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);
}
}