Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用protobuf net序列化/反序列化交错/嵌套数组?_C#_Protobuf Net - Fatal编程技术网

C# 如何使用protobuf net序列化/反序列化交错/嵌套数组?

C# 如何使用protobuf net序列化/反序列化交错/嵌套数组?,c#,protobuf-net,C#,Protobuf Net,在他对马克的回答中提到: 没有中间类型的交错数组/嵌套列表是不合适的-您可以通过在中间引入一个中间类型来填充这一点 我希望这表明有一种方法可以做到这一点,而不改变我的底层代码,也许使用代理? 目前是否有人找到了序列化/反序列化嵌套/交错数组的好方法,这需要(如消息所示)更改您的模型。然而,原则上,这是库完全可以在自己的想象中完成的事情——这只是我还没有编写/测试的代码。所以这取决于你多久需要它。。。我可以看一看,但我不能保证任何特定的时间尺度。解决方案可能是序列化一个中间类型,并使用getter

在他对马克的回答中提到:

没有中间类型的交错数组/嵌套列表是不合适的-您可以通过在中间引入一个中间类型来填充这一点

我希望这表明有一种方法可以做到这一点,而不改变我的底层代码,也许使用代理?
目前是否有人找到了序列化/反序列化嵌套/交错数组的好方法,这需要(如消息所示)更改您的模型。然而,原则上,这是库完全可以在自己的想象中完成的事情——这只是我还没有编写/测试的代码。所以这取决于你多久需要它。。。我可以看一看,但我不能保证任何特定的时间尺度。

解决方案可能是序列化一个中间类型,并使用getter/setter对代码的其余部分隐藏它。 例如:

List\u nestedArray;//我要序列化的嵌套数组。
[原成员(1)]
私有列表_nestedArrayForProtoBuf//从未在其他地方使用
{
得到
{
如果(_nestedArray==null)/(_nestedArray==null | | | _nestedArray.Count==0)如果默认构造函数实例化它
返回null;
return _nestedArray.Select(p=>newprotobufarray(p)).ToList();
}
设置
{
_nestedArray=value.Select(p=>p.MyArray.ToList();
}
}
[原始合同]
公共类ProtobufArray//中间类型
{
[原成员(1)]
公共T[]MyArray;
公共ProtobufArray()
{ }
公共ProtobufArray(T[]数组)
{
MyArray=数组;
}
}

谢谢,这是我目前正在做的一个项目。我需要调查改变我试图序列化的结构的影响。如果protobuf net支持2d/jagged数组,那就太好了,但我现在应该可以解决它了,当然这里也需要:)可能的重复
    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;
    }
}