gpt4 book ai didi

c# - 如何序列化具有接口(interface)作为属性的对象?

转载 作者:太空狗 更新时间:2023-10-29 18:26:15 26 4
gpt4 key购买 nike

我有 2 个接口(interface) IA 和 IB。

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

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

void SetIA(IA value);
}

每个接口(interface)都引用另一个。

我正在尝试按照下面的定义序列化 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;
}
}

当我尝试过度序列化时出现错误,因为这 2 个属性是接口(interface)。我想序列化属性。

我该如何解决这个问题?

我需要在每个界面中都有对另一个的引用。而且我需要能够来回序列化该类。

最佳答案

你的代码中有各种错误,否则这会工作得很好。

  1. ClassA 的构造函数中,您正在设置局部变量 IB,而不是对象的 IB 对象。
  2. ClassB 中,您将转换回对象具体类,而不是将其作为接口(interface)类型单独保留。

您的代码应该如下所示:

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();
}

关于c# - 如何序列化具有接口(interface)作为属性的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/821780/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com