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 回答