2011-07-11 52 views
2

我有一个自定义列表,它携带一些属性,我需要连同其包含项目序列化。如何序列化和反序列化与protobuf网自定义列表

但是,只要将ProtoContract属性添加到我的自定义列表中,它的项目就不会再被序列化。

例子:

[ProtoContract] 
    public class MyCollection : List<string> { 

    [ProtoMember(1)] 
    public string MyAdditionalField; 
    } 

难道这不应该开箱的?

我能想到的唯一可能的解决方法是使用包含单独列表的自定义列表的代理,该列表包含所有数据。然而,我们正在处理相当多的自定义列表......所以这将是一种低效率的方法。

谢谢 TH

回答

1

共同点XmlSerializerTypeDescriptor(也可能是DataContractSerializer - 我没有检查),有之间有很强的鸿沟列表VS 包含列表。如果某物是一个列表,它本身没有值。

首选的布局会有或者有一个列表的值。

在协议层面上,根本没有办法表示它,因为这只是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属性。

+0

谢谢你,我会用代理方法去做。现在我用今天早些时候发布在Google代码上的第203期问题更加困难。 – TwinHabit

+0

@TwinHabit - 稍后会看,但现在正处于“工作”时间 –

相关问题