首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >包装XMLSerializer

包装XMLSerializer
EN

Stack Overflow用户
提问于 2012-03-19 23:31:42
回答 1查看 218关注 0票数 1

我希望把XMLSerializer放在我的一个'facade‘类后面,这样用户就不必向构造函数提供类型信息了。但是这样做有一个问题。考虑这个类:

代码语言:javascript
复制
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中创建的,并且它是共享的。但是在没有这个实例的情况下使用反序列化将不会返回任何内容。这个问题能解决吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-03-20 00:36:24

XmlSerializer不包含该类型,因为XmlSerializer的设计决定该类型不是重要的。下面是100%兼容的,例如:

代码语言:javascript
复制
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

  • cross-platform和跨体系结构使用之间使用生成的/代理types

  • switching的

  • .NET简单易用(例如,在没有严格的客户端/服务器关系的情况下从

使用WP7/SL/XNA

  • simple版本控制中的“完整的”服务

基本上,我的观点是客户端绝对应该知道它期望的是什么,依赖类型是错误的方法。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9773039

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档