【发布时间】:2017-03-01 05:12:10
【问题描述】:
我正在实现客户端-服务器通信。我需要向大小可能不同的客户端发送响应,因为它包含一个序列化数组:
[Serializable]
public struct ServerResponse
{
public ApplicationAction ApplicationAction { get; set; }
public Product[] AssociatedProducts { get; set; }
}
我目前正在做的是使用 XmlSerializer 将我的 ServerResponse 实例序列化为 XML(使用另一种方法完全不会打扰我,我的数据不需要是人类可读的)并将其写入套接字流像这样:
XmlSerializer xmlSerializer = new XmlSerializer(typeof(ServerResponse));
NetworkStream networkStream = client.GetStream();
if (networkStream.CanWrite)
{
xmlSerializer.Serialize(networkStream, response);
}
我的问题是客户端不知道它需要读取的数据的大小。 我的猜测是先发送数据的大小,然后发送所有数据,但要做到这一点我需要知道
如何获得序列化对象的实际大小?
谢谢
【问题讨论】:
-
你使用什么序列化方法,请说明。你使用json格式吗?二进制? XML?或其他。提供用于序列化此类的代码。
-
我编辑了这个问题。我正在使用 XML,但我不介意使用其他格式,因为我的数据不需要人类可读,也许二进制会更合适。
-
我建议将
ServerResponse序列化为本地文件(例如临时文件),然后将该文件发送给客户端。由于它是本地文件,因此您知道它的大小。 -
@dcg 如果您以后不需要此数据,则使用驱动器存储临时数据是一种不好的做法。始终将内存用于临时数据。
标签: c# arrays serialization server