【问题标题】:Selective serialization with SubSonic generated classes使用 SubSonic 生成的类进行选择性序列化
【发布时间】:2010-11-18 02:57:08
【问题描述】:

我已经使用 SubSonic 2 有一段时间了,但是当我开始一个新项目时,我想升级到 3。在我的旧项目中,我使用了一个自定义的、不可持续的 hack 来序列化事物用于网络服务。我真的很想找到一个更优雅的解决方案。

我正在使用 Mono,所以我需要留在已实现的类中,例如DataContractSerializer 可能已经出局了。仍在 ASMX 上,不过一旦支持稳固,我很想升级到 WCF。 Moonlight/Silverlight 将是最初的客户。未来的 JSON/protobuf...

标准的 Xml 序列化程序是可选的,所以我需要一些方法来控制它。这让我想到了 IXmlSerializable。我对 SS 的模板相当陌生,但似乎编辑这些模板可以让我生成不接触其余层次结构链所必需的序列化代码。这是一个“好主意”吗?

我很想只使用 SS 的 POCO 支持,但我认为它不支持复杂类型或数组。

其他想法/选择?

【问题讨论】:

    标签: c# serialization mono subsonic


    【解决方案1】:

    IXmlSerializable 对 IMO 来说有点尴尬。请注意,如果您自己处理XmlSerializer 代码,您可以在运行时使用接受XmlAttributeOverrides 的构造函数覆盖所有内容(但如果您使用它,您应该缓存并重新使用XmlSerializer 实例,否则它会泄漏像筛子)。

    你简短地提到了protobuf;请注意protobuf-net(即使在 v1 中)允许您在 type 级别添加成员级别的序列化数据,因此您可以将该信息包含在生成的类型旁边的部分类中:

    // file 1
    partial class GeneratedClass
    {
        public int Foo { get; set; }
        public string Bar { get; set; }
    }
    // file 2
    [ProtoPartialMember(1, "Foo")]
    [ProtoPartialIgnore("Bar")]
    partial class GeneratedClass {}
    

    【讨论】:

    • 感谢 Marc,你的 protobuf 实现的忠实粉丝,快疯了。虽然我可以手动控制序列化,但最终结果是其他人也可以使用 Web 服务。我希望有一种更自动化的方法,例如向用户呈现的 XSD/WSDL 没有提及 SS 层次结构的其余部分。然后他们从中生成他们的类,依此类推。
    • @joe - 在这种情况下,我建议简单地创建一个与 SS 类型相似的单独 DTO 层,但在您的直接命令下。
    • 这是我最初的解决方法。 :) 虽然我是手工做的,这就是我所说的不可持续的意思。我想SS模板可能是相当自动化的吧?我会试试这个并发布结果。
    猜你喜欢
    • 1970-01-01
    • 2011-02-03
    • 2010-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多