相关疑难解决方法(0)

在不实现任何自定义序列化/反序列化时,是否需要实现ISerializable接口

我正在寻找一个实现ISerializable接口的解决方案中的类.它有一个GetObjectData接口所需的序列化方法.这里没有任何自定义序列化,它只是SerializationInfo使用类的属性名称及其值填充对象.

[Serializable]
public class PersonName :ISerializable
{
    [DataMember]
    public string NamePrefix { get; set; }
    [DataMember]
    public string GivenName { get; set; }
    [DataMember]
    public string SurName { get; set; }

    public PersonName(string givenName, string surName, string namePrefix)
    {
        GivenName = givenName;
        SurName = surName;
        NamePrefix = namePrefix;
    }

    public PersonName()
    {
    }

    #region ISerializable Members

    public void GetObjectData(SerializationInfo info, StreamingContext context)
    {
        info.AddValue("NamePrefix",NamePrefix);
        info.AddValue("GivenName",GivenName);
        info.AddValue("SurName",SurName);
    }
}
Run Code Online (Sandbox Code Playgroud)

从我到目前为止阅读的文档中,据我所知,这就是用类标记[Serializable]属性所会发生的事情,正如你可以看到类没有反序列化构造函数,这就是为什么我是看着它开始.从我所知道的,而不是需要将反序列化构造函数添加到类中,该类实际上不需要首先实现ISerializable接口.那是对的吗?

c# serialization

13
推荐指数
2
解决办法
2万
查看次数

使用ReferenceLoopHandling.Ignore序列化循环相关的ISerializable对象时抛出StackOverflowException

我有一个使用二进制序列化来保存数据的遗留应用程序.现在我们想使用Json.net 4.5来序列化数据,而不需要对现有类进行太多更改.

事情很顺利,直到我们打了一个循环的依赖类.有没有解决此问题的解决方法?

示例代码如下所示

[Serializable]
class Department : ISerializable
{
    public Employee Manager { get; set; }
    public string Name { get; set; }

    public Department() { }
    public Department( SerializationInfo info, StreamingContext context )
    {
        Manager = ( Employee )info.GetValue( "Manager", typeof( Employee ) );
        Name = ( string )info.GetValue( "Name", typeof( string ) );
    }
    public void GetObjectData( SerializationInfo info, StreamingContext context )
    {
        info.AddValue( "Manager", Manager );
        info.AddValue( "Name", Name );
    }
}

[Serializable]
class Employee : …
Run Code Online (Sandbox Code Playgroud)

.net c# serialization json json.net

6
推荐指数
1
解决办法
2825
查看次数

标签 统计

c# ×2

serialization ×2

.net ×1

json ×1

json.net ×1