代码之家  ›  专栏  ›  技术社区  ›  Blixt

使用WCF序列化时对集合使用其他类型

  •  0
  • Blixt  · 技术社区  · 15 年前

    假设我有一个在OO模型中有意义的数据对象,但对于序列化,我希望用一个ID替换引用其他类型的字段,或者在某些情况下,用一个文本和ID替换一个简单对象。

    是否有可能让序列化程序以不同的方式处理特定字段,或者我必须从头开始用简化字段重新定义第二个数据对象类并使用它?

    Person
      Guid Id
      string Name
      List<Person> Siblings
    

    我想要序列化的内容:

    Person
      Guid Id
      string Name
      List<Guid> Siblings
    

    我只想上一节课, Person ,并定义我的服务的序列化行为(最好不要在数据类型级别,因为它可以序列化为XML或JSON)。

    我知道WCF中对引用的支持,但在这种情况下,我将引用结果集中其他地方未包含的其他类型;我只想包括他们的身份证。

    2 回复  |  直到 15 年前
        1
  •  1
  •   Paul Turner    15 年前

    一旦更改了所传输信息的结构,数据传输对象可能是最干净、最简单的选择。

    事实上,我会的 总是 建议为WCF服务创建专用DTO,将服务及其传输的数据与我通常使用的域模型分离。单独管理模型和服务的更改会带来开销,但这比将域对象强制设置为服务的正确形状,然后将它们保持在那里要省力得多。

        2
  •  1
  •   Darin Dimitrov    15 年前

    你可以 exclude Siblings 属性,并添加只读 SiblingGuids :

    Person
      Guid Id
      string Name
      [NonSerialized]
      List<Person> Siblings
      List<Guid> SiblingGuids // Only a getter which will expose guids