我希望把XMLSerializer放在我的一个'facade‘类后面,这样用户就不必向构造函数提供类型信息了。但是这样做有一个问题。考虑这个类:
Class XmlFormatter
Private Shared xs As XmlSerializer
Public Function Deserialize(ByVal serializationStream As Stream) As Object
Dim o As Object = Nothing
If Not xs Is Nothing Then
o = xs.Deserialize(serializationStream)
End If
Return o
End Function
Public Overloads Sub Serialize(ByVal serializationStream As Stream, ByVal graph As Object)
If xs Is Nothing Then
xs = New XmlSerializer(graph.GetType())
End If
xs.Serialize(serializationStream, graph)
End Sub
End Class问题是这个类的用户不能在没有使用Serialize的情况下使用反序列化,因为XMLSerializer实例是在Serialize中创建的,并且它是共享的。但是在没有这个实例的情况下使用反序列化将不会返回任何内容。这个问题能解决吗?
发布于 2012-03-20 00:36:24
XmlSerializer不包含该类型,因为XmlSerializer的设计决定该类型不是重要的。下面是100%兼容的,例如:
namespace X {
public class A {
public string B;
}
}
namespace Y.Z {
[XmlRoot("A"), XmlType("A")]
public class C {
[XmlElement("B")]
public string D {get;set;}
}
}这是IMO最有用的方法,并允许:
在POCO/DTO
使用WP7/SL/XNA
基本上,我的观点是客户端绝对应该知道它期望的是什么,依赖类型是错误的方法。
https://stackoverflow.com/questions/9773039
复制相似问题