使用Protobuf.net序列化内存流元组(锯齿状数组)

时间:2011-10-22 13:31:52

标签: c# wcf serialization f# protobuf-net

是否可以使用Protobuf.net序列化二进制编码器创建的内存流元组?如果我尝试这样做,Protobuf说它无法序列化流。

我所追求的是序列化一组锯齿状数组。我不想将它们转换为1D数组,因为我认为没有必要。所以我认为我会自己将锯齿状数组序列化为内存流,但我希望Protobuf.net为我序列化元组。我需要尽可能快地进行整体序列化/反序列化。

编辑:

我的总体目标是尽可能快地通过WCF发送以下锯齿状数组元组。总时间from jagged array to jagged array计算在内。

// F# interactive code
#time "on"
#r @"d:\Protobuf\protobuf-net.dll"

let getJaggedArray () =
  let size = 100
  let rnd = System.Random 1
  Array.init size (fun i ->
    Array.init size (fun j ->
      Array.init size (fun k ->
        rnd.NextDouble() )))

let wcfData = (getJaggedArray (), getJaggedArray ()), getJaggedArray ()

let file = new System.IO.FileStream ("test.bin", System.IO.FileMode.Create)
ProtoBuf.Serializer.Serialize (file, wcfData)
file.Close()

// === Future use ===
//[<ServiceContract>]
//type IWCF =
//  
//  [<OperationContract>]
//  [<ProtoBehavior>]
//  abstract Send: wcfData -> unit

1 个答案:

答案 0 :(得分:2)

Protobuf-net当前没有任何特定的流处理(虽然它会处理byte[]),虽然我猜它可以只是消耗Stream(序列化)并重现MemoryStream(反序列化)。如果你不想改变你的模型,应该可以为Stream注册一个“代理”,它只在几行代码中完成(请告诉我是否感兴趣)。 / p>

它自动支持大多数常见的“元组”模式,但锯齿状数据又是一个问题 - 尽管如果我们确实需要,这个可以处理(更常见的是,有一个外部列表)他们自己拥有内部列表的对象是一种实用的解决方法,以“锯齿状”,并且当前有效。

如果您可以发布更完整(理想情况下可运行)的示例,我可能会提供更多指导。

相关问题