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