Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在.NET中序列化不可序列化的对象_C# - Fatal编程技术网

C# 如何在.NET中序列化不可序列化的对象

C# 如何在.NET中序列化不可序列化的对象,c#,C#,我有第三方dll。从中我接收到某种类型的对象,我知道它的接口,但不是所有的对象。该对象未标记为可序列化,我与该库开发完全没有关系 我想将它序列化到某个存储中,然后从具有相同状态的存储中接收它,稍后是public/private、references等。。我在这里有一个选择——创建我自己的序列化机制,其作用与.NET序列化程序相同,唯一的区别是它不会修改序列化属性 这是最好的办法吗 谢谢。您可以使用或序列化未标记SerializableAttribute的类型 可能还有其他选择。如果没有任何东西适

我有第三方dll。从中我接收到某种类型的对象,我知道它的接口,但不是所有的对象。该对象未标记为可序列化,我与该库开发完全没有关系

我想将它序列化到某个存储中,然后从具有相同状态的存储中接收它,稍后是public/private、references等。。我在这里有一个选择——创建我自己的序列化机制,其作用与.NET序列化程序相同,唯一的区别是它不会修改序列化属性

这是最好的办法吗

谢谢。

您可以使用或序列化未标记SerializableAttribute的类型

可能还有其他选择。如果没有任何东西适合您,则始终可以进行自定义实现。

您可以使用或序列化未标记为SerializableAttribute的类型


可能还有其他选择。如果没有任何东西适合您,您可以随时使用自定义实现。

您可以创建自己的类,从该对象继承并序列化它。
或者,您可以创建自己的该类副本,并创建一些显式或隐式但不推荐的转换方法。

您可以创建自己的类,从该对象继承并序列化它。

或者,您可以创建该类的自己的副本,并创建一些显式或隐式但不推荐的转换方法。

XmlSerializer不是序列化所有内容吗?不是。只有标记有可序列化属性的对象。XmlSerializer非常受限制。例如,它不支持循环对象图。您想要哪种序列化程序?属性还是字段?你需要循环图还是多态性?@LexRema,你所说的可序列化属性和XmlSerializer是错误的。属性用于定制流程,但根本不是必需的。获取POCO并将其馈送到XmlSerializer实例。它起作用了。当然,递归对象和流之类的东西也有一些警告,但可以找到解决方法。我认为您需要提供有关您尝试序列化的对象的更多信息。XmlSerializer不是序列化所有内容吗?不是。只有标记为serializable attributes.XmlSerializer的对象受到非常严格的限制。例如,它不支持循环对象图。您想要哪种序列化程序?属性还是字段?你需要循环图还是多态性?@LexRema,你所说的可序列化属性和XmlSerializer是错误的。属性用于定制流程,但根本不是必需的。获取POCO并将其馈送到XmlSerializer实例。它起作用了。当然,递归对象和流之类的东西也有一些警告,但可以找到解决方法。我认为您需要提供有关您试图序列化的对象的更多信息。我只是该对象的公共契约,因此,如果不使用反射,这似乎不是选项。并非所有类型都可以使用XmlSerializer序列化-例如字典类型。@Phil,是的,这就是为什么我们需要查看OP使用的对象。否则,答案就只能是抽象的,并且无法在OPs场景中选择最佳解决方案。@Phil:事实上,说得很清楚,泛型是不受支持的。我知道这一点。这就是我将最后一条语句放在那里的原因。它确实序列化了公共属性/字段,而没有将对象标记为可序列化。但不是更深层次的。我只有对象的公共契约,所以似乎不使用反射就不能选择。不是所有类型都可以用XmlSerializer序列化-例如字典类型。@Phil,是的,这就是为什么我们需要查看OP使用的对象。否则,答案就只能是抽象的,并且无法在OPs场景中选择最佳解决方案。@Phil:事实上,说得很清楚,泛型是不受支持的。我知道这一点。这就是我将最后一条语句放在那里的原因。它确实序列化了公共属性/字段,而没有将对象标记为可序列化。但不是更深。我只有接口,需要序列化它们继承的对象。我不知道他们使用什么对象,也没有机会继承它。MyObj.GetType可能会帮助您获得一些线索。GetType用于运行时继承吗?那可能很酷。但是我需要对所有引用的对象执行相同的操作,这使得任务不可能:@LexRama好吧,实现这一点的唯一方法是递归地解析对象类型,并在可以序列化的字典中插入值。我只有接口,需要序列化它们继承的对象。我不知道他们使用什么对象,也没有机会继承它。MyObj.GetType可能会帮助您获得一些线索。GetType用于运行时继承吗?那可能很酷。但是我需要对所有引用的对象执行同样的操作,这使得任务变得不可能:@LexRama好吧,实现这一点的唯一方法是递归地解析对象类型,并在可以序列化的字典中插入值。