2011-07-11 10 views
2

私はカスタムリストを持っています。protobuf-netを使ってカスタムリストをシリアライズおよび逆シリアル化する方法

ただし、私のカスタムリストにProtoContract属性を追加すると、そのアイテムはもうシリアル化されません。

例:

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

    [ProtoMember(1)] 
    public string MyAdditionalField; 
    } 

は、このボックスの外に動作するようになっていませんか?

考えられる唯一の回避策は、カスタムリストのサロゲートを使用することです。カスタムリストには、すべてのデータを含む別のリストが含まれています。しかし、私たちは多くのカスタムリストを扱っています...これは非効率的なアプローチになります。

は TH

答えて

1
XmlSerializerTypeDescriptorに共通し

、ありがとう(そしておそらく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属性を持っているので、無効なコレクション型です。

+0

ありがとう、私は代理のアプローチで行くつもりです。今私は今日Googleコードで投稿したIssue 203でもっと苦労しています。 – TwinHabit

+0

@TwinHabit - 後で見えますが、現時点では "仕事"の時間です –

関連する問題