在实现ISerializable时,GetObjectData()方法永远不会被命中

本文关键字:永远 方法 ISerializable 实现 GetObjectData | 更新日期: 2023-09-27 18:29:30

XmlSerializer从不在我的ISerializable上调用GetObjcetData()。什么时候调用GetObjectData()?谢谢

class Program
{
  static void Main(string[] args)
  {
    var thing = new Thing { Name = "Dude", Id = 1 };
    var xmlSerializer = new XmlSerializer(typeof(Thing));
    var sw = new StringWriter();
    xmlSerializer.Serialize(sw, foo);
    var serializedXml = sw.ToString();
    var sr = new StringReader(serializedXml);
    var result = (Thing)xmlSerializer.Deserialize(sr);
  }        
}
public class Thing : ISerializable
{
  public string Name { get; set; }
  public int Id { get; set; }
  public Thing() { }        
  public Thing(SerializationInfo info, StreamingContext context) { }
  public void GetObjectData(SerializationInfo info, StreamingContext context)
  {
    // Breakpoint placed on the following line never gets hit:
    throw new NotImplementedException();
  }
}

在实现ISerializable时,GetObjectData()方法永远不会被命中

XmlSerializer不调用GetObjectData。二进制和soap都有。如果您想管理xml序列化,请使用IXmlSerializable而不是