我有一个自定义List,它带有一些我需要序列化的属性及其包含的项目。
但是,只要我将ProtoContract属性添加到自定义列表中,它的项目就不再被序列化了。
示例:
[ProtoContract]
public class MyCollection : List<string> {
[ProtoMember(1)]
public string MyAdditionalField;
}
这不应该开箱即用吗?
我能想到的唯一可能的解决方法是使用自定义列表的代理项,该列表包含一个单独的列表,该列表随后包含所有数据。但是,我们正在处理大量的自定义列表......所以这将是一种低效的方法。
谢谢你, TH
答案 0 :(得分:1)
与XmlSerializer
和TypeDescriptor
(以及可能DataContractSerializer
- 我没有检查过)相同, 列表与之间存在很大差异包含列表。如果某个内容是列表,则它本身没有值。
首选布局是 有一个列表或值。
在协议级别,根本无法表示,因为这只是repeated string {name} = {field}
- MyAdditionalField
根本无处可去。
(更新);经过测试,确实XmlSerializer
行为相同:
<ArrayOfString xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="
http://www.w3.org/2001/XMLSchema">
<string>abc</string>
<string>def</string>
</ArrayOfString>
DataContractSerializer
更讨厌它,扔掉:
类型'MyCollection'是一种无效的集合类型,因为它具有DataContractAttribute属性。