【问题标题】:how to convert a a list of objects into a stream如何将对象列表转换为流
【发布时间】:2012-12-14 09:07:04
【问题描述】:

您好,我正在构建一个 wcf 服务,我正在尝试让它作为 StreamedResponse 发送请求。现在我的服务用于返回对象列表,现在应该只返回一个流。我的问题是我怎么能将此对象列表转换为流,以便正确发送。我正在用 C# 编写我的 wcf 服务。谢谢您的时间

【问题讨论】:

  • 如果你从 WCF 返回一个 Stream,你基本上对序列化负全部责任。所以“正确发送”取决于您的序列化和协议(json/xml/binary)。然而,WCF 将负责传输 (tcp/http/msmq)。你能详细说明一下这个场景吗?
  • 好的,我正在使用 json。我已经对其进行了测试,并且服务器已经正确地向我发送了其他对象,但是在这种特殊方法中,大小太大了,所以我将其更改为 streamedRequest .我尝试发回一个对象,它工作正常。

标签: wcf stream


【解决方案1】:

我建议您将列表序列化为 JSON 或 XML,然后将其转换为流。假设您的列表包含字符串,这是一个将字符串列表序列化为 json 并将其加载到内存流中的示例。我希望这对你有一些教育价值,让你更好地理解这种编程语言的可能性:)

List<string> listOfStrings = new List<string>();
listOfStrings.Add("Hello");
listOfStrings.Add("World!");
listOfStrings.Add("Foo");
listOfStrings.Add("bar");


// this is of datatype string
var json = new JavaScriptSerializer().Serialize(listOfStrings);

// this is an array of datatype byte
var bytes = System.Text.Encoding.UTF8.GetBytes(json);

// your stream
var memStream = new MemoryStream(bytes);

// TODO: Add code for sending your memory stream

【讨论】:

  • 好的,这非常有帮助。但是我已经在 operationContract 中声明响应将是 Json 格式,是否有必要手动进行转换?
  • 为了确保您应该检查以查看响应的当前格式。这是唯一确定的方法。
  • 我已经检查过了,它是 json 格式。我已经小规模测试过,希望它现在可以正常工作了。谢谢你的时间
  • 哈哈别担心我会这样做,我只是在等待在网络服务器中测试它,我想关闭帖子,但是当它工作时,我必须接受你的答案:)
  • @libathos 当您返回“流”以获得性能时,您完全放弃了自动序列化以获得性能。
猜你喜欢
  • 2018-07-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-19
  • 2021-11-25
  • 1970-01-01
  • 2017-12-27
  • 1970-01-01
相关资源
最近更新 更多