Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/316.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#_.net_Silverlight_Serialization - Fatal编程技术网

C# .NET反序列化-返回多个类型

C# .NET反序列化-返回多个类型,c#,.net,silverlight,serialization,C#,.net,Silverlight,Serialization,我们建立了一个框架,其API如下: T Deserialize<T>(string to deserialize) { // XmlSerializer(typeof(T)) // deserialize and return } 当我们得到一个苹果的时候,这是非常有效的,然而,有时我们会感到“不安”。所以我要么买“苹果”要么买“不尿布”。当我得到“notaple”时,我得到一个例外 因为我们有很多围绕这个方法构建的代码,所以我不想去改变像方法签名这样的东西。但

我们建立了一个框架,其API如下:

T Deserialize<T>(string to deserialize)
{
    //  XmlSerializer(typeof(T))
    //  deserialize and return
}
当我们得到一个苹果的时候,这是非常有效的,然而,有时我们会感到“不安”。所以我要么买“苹果”要么买“不尿布”。当我得到“notaple”时,我得到一个例外

因为我们有很多围绕这个方法构建的代码,所以我不想去改变像方法签名这样的东西。但是,我可以完全灵活地将我喜欢的任何类传递到这个反序列化方法中。

通常,您“知道”您正在序列化和反序列化的内容。e、 g.您可以这样序列化:

serializer.Serialize(stream, new Apple());
serializer.Serialize(stream, new notAnApple());
然后,您可以像这样序列化:

Apple apple = (Apple)deserialzer.Deserialize(stream);
notAnApple peach = (notAnApple)desserializer.Deserialize(stream);

通常情况下,您不会随机尝试反序列化数据,以确定反序列化的内容。从技术上讲,您已经知道了,因为您有特定的文件格式或特定的流格式。

您想修复什么?是否要拒绝
notaple
的实例?您想捕获异常吗?你想找到一种方法来正确地反序列化
notAnApple
?如果类型是水果,你应该能够同时处理苹果和橙子如果你传入的数据将被反序列化为“notAnApple”,而你想要的是“Apple”,唯一的解决方法就是不传入将被反序列化为“notAnApple”的数据@PeterRitchie有没有什么魔术可以让我通过容器,它有一个苹果和一个notaple字段,xml被神奇地反序列化到正确的位置?是的,伙计们,我知道我在要求一些疯狂的东西,所以,很明显我不明白你想做什么。如果反序列化NotApp是一个错误,为什么要序列化它?因为NotApp是一个错误对象,它告诉我们出了什么问题。如果我们可以反序列化网络上的错误对象或苹果(如果是网络上的),那就太好了。在反序列化之前,你需要知道错误对象在那里。如果它在随机的地方停留在那里,您将不得不截获异常并处理notAnApple对象(或任何反序列化的对象)。FWIW,我不建议随机更改您尝试反序列化的数据格式。或者,您可以在流中添加一个标志,告诉您下一个对象是否为错误;但是,这似乎是浪费——我会将错误对象放在流中特定的、预期的点上如果你不能确定你正在反序列化什么,你必须通过异常的方式来处理它。。。
Apple apple = (Apple)deserialzer.Deserialize(stream);
notAnApple peach = (notAnApple)desserializer.Deserialize(stream);