4

protobuf-net が適切でないシナリオについての彼の回答では? マークは次のように述べています。

ギザギザの配列 / 中間型のないネストされたリストは問題ありません - 中間型を中間型に導入することでこれをシムできます

おそらくサロゲートを使用して、基になるコードを変更せずにそれを行う方法があることをこれが示唆していることを願っていますか? ネストされた/ジャグ配列をシリアライズ/デシリアライズするための良いアプローチを見つけた人はいますか

4

2 に答える 2

9

現時点では、(メッセージが示すように) モデルを変更する必要があります。ただし、原則として、これはライブラリが独自の想像力で完全に実行できるものです。これは、私がまだ書いたりテストしたりしていないコードにすぎません。ですから、あなたがそれをどれだけ早く必要とするかによります... 私はそれを見ることができますが、特定のタイムスケールを保証することはできません.

于 2013-04-24T08:50:43.387 に答える
1

解決策は、中間型をシリアル化し、getter/setter を使用してそれをコードの残りの部分から隠すことです。例:

    List<double[]> _nestedArray ; // The nested array I would like to serialize.

    [ProtoMember(1)] 
    private List<ProtobufArray<double>> _nestedArrayForProtoBuf // Never used elsewhere
    {
        get 
        {
            if (_nestedArray == null)  //  ( _nestedArray == null || _nestedArray.Count == 0 )  if the default constructor instanciate it
                return null;
            return _nestedArray.Select(p => new ProtobufArray<double>(p)).ToList();
        }
        set 
        {
            _nestedArray = value.Select(p => p.MyArray).ToList();
        }
    }



[ProtoContract]
public class ProtobufArray<T>   // The intermediate type
{
    [ProtoMember(1)]
    public T[] MyArray;

    public ProtobufArray()
    { }
    public ProtobufArray(T[] array)
    {
        MyArray = array;
    }
}
于 2014-06-26T19:46:55.120 に答える