我想要做的是通过一个字节数组字段发送包含头部对象和压缩数据的JSON。
[JsonObject(MemberSerialization.OptOut)]
public class Message
{
public Message()
{
Header = new Header();
}
public Header Header { get; set; }
public byte[] Data { get; set; }
}
字节数组是gzip压缩的JSON对象,但这并不那么重要。我遇到的问题是,如果我对JSON进行序列化,它会转换为字符串,然后再转换回字节。问题在于,由于序列化字节数组会将其转换为字符串表示形式,因此消息大小会增加相当多。
我受到最大消息大小的限制,并且已经实现了压缩数据的拆分,但当我发送包含压缩数据的Byte数组和未压缩头的JSON时,序列化JSON对象使我远超过消息大小限制。
有没有一种可靠的方法可以直接将JSON对象转换为字节数组。
var stringMessage = JsonConvert.SerializeObject(message,Formatting.None);
var bytes = Encoding.UTF8.GetBytes(stringMessage);
var stringMessage2 = JsonConvert.SerializeObject(message.TransportHeader, Formatting.None);
var bytes2 = Encoding.UTF8.GetBytes(stringMessage2);
Message eventMessage = new Message(bytes);
var bytes3= Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(message.Transportdata));
压缩后的数据大小=243905
序列化后的完整JSON字节数=325313
仅标题的字节大小=90
仅压缩数据序列化并转换回字节=325210,(当通过JsonConvert.SerializeObject序列化数据并生成字符串表示时,大小会增加)
很明显,它会显著增加,并且是由字节数组引起的。
MemoryStream
,然后使用ToArray()
获取byte[]
。 - Camilo Terevinto