在protobuf-net中,
是否有计划添加对无属性POCO的支持,以避免属性索引(ProtoContact)?
我在DTO上为每个属性添加索引没有问题。
我使用我的实用程序自动创建DTO,并且protobuf成员有一个配置标志。
问题是在服务堆栈中使用RESTful服务,
我与客户(在.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; }
}
感谢
答案 0 :(得分: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);