在 protobuf-net 中,
是否计划添加对无属性 POCO 的支持,以避免属性索引 (ProtoContact)?
我在 DTO 上为每个属性添加索引没有问题。
我使用我的实用程序自动创建 DTO,并且有一个用于 protobuf 成员的配置标志。
问题在于,将 RESTful 服务与 ServiceStack 一起使用,
我与客户(在 .Net 中工作)共享 2 个程序集,
没有任何依赖项的模型,也没有 ServiceStack(不是 IReturn),也没有 protobuf-net。
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/