gpt4 book ai didi

c# - 序列化C#对象,想反序列化为接口(interface)

转载 作者:行者123 更新时间:2023-11-30 17:04:09 25 4
gpt4 key购买 nike

我想在服务器和客户端之间发送指令对象。我希望能够序列化一个接口(interface)的实现,然后,当我反序列化它时,我想将它反序列化为通用接口(interface)类型(同时它保持它被序列化为的实际类型)。

我尝试使用默认的 BinarySerializer 执行此操作,但在通过网络发送信息时遇到了问题。

我也尝试过使用 Protobuf 进行序列化,但是对于 Protobuf,您必须知道要反序列化到的对象的完全限定类型。即:

public interface IExample
{
void foo();
}
public class Implementation : IExample
{
void foo() { Console.WriteLine("This is an implementation!"); }
}

只能反序列化:

Serializer.Deserialize<Implementation>(stream); 

这违背了多态性的观点。

有没有我可以使用的序列化库,反序列化方法的调用者不需要知道对象的完全限定类型?

即:

Implementation imp = new Implementation();
Stream inStream = Serialize(implementation);
IExample example = Deserialize(inStream);

example.foo();

这应该打印“This is an implementation!”到控制台。

最佳答案

JSON 是我推荐的。当然,如果你想将它解析为一种类型,你总是需要知道一种类型,但 JSON 序列化器是我认为你需要的最好的。

我建议在 System.Runtime.Serialization.Json 中使用 DataContractJsonSerializer,因为根据我的经验,它是最灵活的。

这里有一些关于发射和反序列化类型的额外有用的问题/文章: when does DataContractJsonSerializer include the type information?

http://kashfarooq.wordpress.com/2011/01/31/creating-net-objects-from-json-using-datacontractjsonserializer/

关于c# - 序列化C#对象,想反序列化为接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17904463/

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