如何序列化具有接口作为属性的对象?

Dav*_*rab 8 c# serialization interface

我有2个接口IA和IB.

public interface IA
{
    IB InterfaceB { get; set;  }
}

public interface IB
{
    IA InterfaceA { get; set;  }

    void SetIA(IA value);
}
Run Code Online (Sandbox Code Playgroud)

每个接口引用另一个.

我正在尝试按以下定义序列化ClassA.

[Serializable]
public class ClassA : IA
{
    public IB InterfaceB { get; set; }

    public ClassA()
    {
        // Call outside function to get Interface B
        IB interfaceB = Program.GetInsanceForIB();

        // Set IB to have A
        interfaceB.SetIA(this);
    }
}

[Serializable]
public class ClassB : IB
{
    public IA InterfaceA { get; set; }

    public void SetIA(IA value)
    {
        this.InterfaceA = value as ClassA;
    }
}
Run Code Online (Sandbox Code Playgroud)

我尝试过序列化时出错,因为2个属性是接口.我想序列化属性.

我怎么能绕过这个?

我需要在每个接口中引用另一个接口.我需要能够来回序列化这个类.

Eri*_*bal 10

您的代码中有各种错误,否则这样可以正常工作.

  1. 在构造函数中ClassA,您正在设置局部变量IB,而不是对象的IB对象.
  2. ClassB,您将回退到对象具体类,而不是将其作为接口类型.

以下是您的代码应如下所示:

public interface IA 
{ 
    IB InterfaceB { get; set; } 
}

public interface IB 
{ 
    IA InterfaceA { get; set; } 
    void SetIA(IA value);
}

[Serializable]
public class ClassA : IA
{    
    public IB InterfaceB { get; set; }    

    public ClassA()    
    {        
        // Call outside function to get Interface B        
        this.InterfaceB = new ClassB();

        // Set IB to have A        
        InterfaceB.SetIA(this);    
    }
}

[Serializable]
public class ClassB : IB
{    
    public IA InterfaceA { get; set; }    

    public void SetIA(IA value)    
    {       
        this.InterfaceA = value;    
    }
}

[STAThread]
static void Main()
{
    MemoryStream ms = new MemoryStream();
    BinaryFormatter bin = new BinaryFormatter();

    ClassA myA = new ClassA();

    bin.Serialize(ms, myA);

    ms.Position = 0;

    ClassA myOtherA = bin.Deserialize(ms) as ClassA;


    Console.ReadLine();
}
Run Code Online (Sandbox Code Playgroud)