WCF返回Streams或Strings?

我一直对WCF和返回类型越来越感到沮丧。 我目前正在研究一种从SQL读取数据的方法,根据检索的数据量创建某种类型的新对象,然后使用从SQL检索的数据分配对象值。

我有适当的function来序列化为JSON和XML。 理想情况下,我想将我的序列化对象转换为字符串,以便我可以以转换的方式从浏览器中读取响应,希望以下示例更具说明性。

我在序列化对象并返回流时获得的好处是格式化是完美的,并且它在类中使用我的DataMembers,因此JSON中的响应将如下所示:

{"GameID":1,"ProposalID":5} 

但是当我在浏览器中检索数据时,它会要求我保存流文件,我在记事本中打开流来查看此结果。 这并不理想,因为结果不会作为字符串出现在浏览器上。

如果我返回一个字符串,我会得到数据,但是使用DataMembers没有正确格式化或者序列化的任何优点,因此信息非常简单,没有意义:

 "3151" 

从这个例子中可以看出,我还检索了2个每个2个变量的SQL字段。 我不确定如何将结果附加到流上,因为它只返回最后一个结果(5,1),更不用说正确地返回它们了。

虽然我不确定我是否可以粘贴一些我想要实现的东西,但无论如何它都是: http : //api.justin.tv/api/user/show/justin.json

我的直接想法是使用XMLWriter或某种手动编写信息,但我希望能够为序列化和DataMemberfunction支付红利。

我的回程代码:

 foreach (MatchProposal proposal in Proposals) { returnStream = WriteJSON(SerializeToJSON(proposal)); } public MemoryStream SerializeToJSON(object serializeObject) { DataContractJsonSerializer serializer = new DataContractJsonSerializer(serializeObject.GetType()); MemoryStream memoryStream = new MemoryStream(); serializer.WriteObject(memoryStream, serializeObject); return memoryStream; } public Stream WriteJSON(MemoryStream memoryStream) { string json = Encoding.Default.GetString(memoryStream.ToArray()); return new System.IO.MemoryStream(ASCIIEncoding.Default.GetBytes(json)); } 

而我的未完成的简单String返回代码:

  WebOperationContext.Current.OutgoingResponse.Format = WebMessageFormat.Json; 

它只返回SQL数据。

我希望我已经提供了足够的信息,说明我到目前为止所做的工作以及我希望从给出的例子中得到什么。 简而言之,我想实现在Justin.tv API中编写的内容,我想利用序列化,但是当我在浏览器中浏览返回流时,我会收到一个文件下载,我可以打开在记事本中,这是不理想的。

感谢任何建议,如果我似乎在某些时候丢失,或任何我可以实现的决议:)

此致,罗纳德

您是否将ContentType应用于响应,例如text/xmltext/json

我想这可能是问题所在。 因为您要返回Stream而不是对象,我认为没有指定任何内容类型,因此浏览器不知道如何处理它 – 这会提示下载消息。 尝试添加text/json的内容类型以查看是否对问题进行排序。 然后,我会检查所请求的内容类型,并使您的服务适应该匹配。

关于向流添加第二个对象的更新 ,我建议不要尝试简单地将其添加到流的末尾。 相反,为什么不构建一个复合模型,它包含两个属性,表示要从服务序列化和传回的对象?