2016-05-01 94 views
0

我正在寻找一种方法将Avro序列化到Avro C#库中的字节数组。有一个链接,如下面的Avro的文档链接描述Avro的Java库做: https://cwiki.apache.org/confluence/display/AVRO/FAQ#FAQ-Serializingtoabytearray如何使用Avro c#库将Avro序列化为字节数组?

代码从上面的链接复制:

ByteArrayOutputStream out = new ByteArrayOutputStream(); 
BinaryEncoder encoder = EncoderFactory.get().binaryEncoder(out, null); 

DatumWriter<User> writer = new SpecificDatumWriter<User>(User.getClassSchema()); 

writer.write(user, encoder); 
encoder.flush(); 
out.close(); 
byte[] serializedBytes = out.toByteArray(); 

但我还没有找到一种方法,在Avro的C#做图书馆。我基本上在寻找c#等价于上面的代码。

回答

0

您可以使用这些方法将对象转换为对象并将其转换为字节数组,反之亦然。代码提取自https://stackoverflow.com/a/18205093/6138713

// Convert an object to a byte array 
private byte[] ObjectToByteArray(Object obj) 
{ 
    if(obj == null) 
     return null; 

    BinaryFormatter bf = new BinaryFormatter(); 
    MemoryStream ms = new MemoryStream(); 
    bf.Serialize(ms, obj); 

    return ms.ToArray(); 
} 

// Convert a byte array to an Object 
private Object ByteArrayToObject(byte[] arrBytes) 
{ 
    MemoryStream memStream = new MemoryStream(); 
    BinaryFormatter binForm = new BinaryFormatter(); 
    memStream.Write(arrBytes, 0, arrBytes.Length); 
    memStream.Seek(0, SeekOrigin.Begin); 
    Object obj = (Object) binForm.Deserialize(memStream); 

    return obj; 
} 
+0

对不起,我更新了我的问题,因为我可能不清楚。我正在寻找Avro ByteArray序列化技术。 –

+0

您的avro对象仍被视为c#.net中的一种对象,因此您仍然可以使用此方法。只要传递任何它是你的对象将它变成一个字节数组。 –

相关问题