servicestack - protobuf-net 属性索引器

标签 servicestack protobuf-net

在 protobuf-net 中,
是否计划添加对无属性 POCO 的支持,以避免属性索引 (ProtoContact)?

我在 DTO 上为每个属性添加索引没有问题。

我使用我的实用程序自动创建 DTO,并且有一个用于 protobuf 成员的配置标志。

问题在于,将 RESTful 服务与 ServiceStack 一起使用,

我与客户(在 .Net 中工作)共享 2 个程序集,

  1. 没有任何依赖项的模型,也没有 ServiceStack(不是 IReturn),也没有 protobuf-net。

  2. client.requests,它是实际服务调用的瘦包装器,带有一些验证,

    错误处理等。本质上是对每个服务的简化调用。

    此程序集依赖于 ServiceStack 客户端和 Protobuf-net。

但该模型是无依赖性的,因为客户可以直接在其业务层中使用它。

在这种情况下,我遇到了 protobuf-net 的问题,而不是 ServiceStack 的问题,因为 IReturn 不是强制性的。

是否有任何解决方案,以避免添加 protobuf 索引器?

更新:感谢Mark Gravell,他在此处和 previous related question 中给出了答案。

解决方案是替代内联属性,

[XmlType]/[XmlElement(Order=key)] 仅使用 System.Xml,

或使用 System.Runtime.Serialization 的 [DataContract]/[DataMember(Order=key)]。

因此该模型是无依赖性的,无需引用 protobuf-net。

我应该更好地阅读。

         [XmlType("Person")]
        public class Person
        {
          [XmlElement(Order = 1)]
          public string Name { get; set; }

          [XmlElement( Order = 2)]
          public string Address { get; set; }
       }

谢谢

最佳答案

有 2 个选项出现:

  • 如果生成的代码是 partial类,您可以为相同类型创建一个第二个部分类文件,并在那里添加属性 - 这就是同一类型的一部分;特别要注意 [ProtoPartialMember(...)]可以添加到类型(多次),但描述一个成员;或者如果您想要减少维护,[ProtoContract(ImplicitFields=ImplicitFields.AllPublic)]可以用来让模型控制规则(但在执行此操作之前请阅读 ImplicitFields 上的智能感知注释)
  • 您可以在运行时配置类型,使用您想要的任何规则,通过 RuntimeTypeModel :

    var metaType = RuntimeTypeModel.Default.Add(yourType, false);
    // TODO: some reflection that decides what members you want to serialize
    // and as what keys
    foreach(...)
        metaType.Add(member, key);
    

关于servicestack - protobuf-net 属性索引器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20509225/

相关文章:

protocol-buffers - 减少 protobuf 消息大小的最佳实践?

c# - 如何使用旧代码读取扩展.proto 文件(textformat.merge)?

Java Protobuf(版本 2.4.1)和 Protobuf-net(版本 r480)继承兼容性

redis - IRedisClient 使用后未处理

c# - 在 Redis (ServiceStack RedisClient) 中使用事务自动增加 Id

ServiceStack JsonServiceClient OnAuthenticationRequired

c++ - C++ 中的 Protobuf ParseDelimitedFrom 实现

servicestack - 如何将 NLog Config 与 ServiceStack 日志一起使用?

c# - 仅更新客户端指定值的参数

c# - 使用 protobuf-net 为 Windows 应用商店应用程序序列化私有(private)成员