【发布时间】:2011-12-16 22:14:35
【问题描述】:
我最近尝试使用内置 WCF 功能而不是 Newtonsoft 的 JSON.net 工具包来输出 JSON。
我可以让 JSON 输出正常,但我仍然留下了 WCF 留下的一些奇怪的默认序列化标记。
这是执行 GET 时向客户端输出的内容:
<string xmlns="http://schemas.microsoft.com/2003/10/Serialization/">{"LobbyID":2,"LobbyID2":0}</string>
如果可能的话,我想去掉“xmlns="http://schemas.microsoft.com/2003/10/Serialization/”,所以它只是一个直接的 JSON 数据类型响应。
这是带有相关 DataContracts 的大厅类:
[DataContract(Name = "LobbyContract", Namespace = "xx")]
public class Lobby
{
[DataMember(Name="LobbyID")]
private int LobbyID;
[DataMember(Name = "LobbyID2")]
private int LobbyID2;
然后我就有了这个通话功能:
[OperationContract]
[Description("PlaceHolder")]
[WebGet(UriTemplate = "xxx/xx/{gameID}/{format}") ]
public string FindGameProposals(string gameID, string format)
{
Lobby lobby = new Lobby();
lobby.SetLobbyID(Convert.ToInt32(gameID));
string returnValue = "";
if (format == "xml")
{
}
else if (format == "json")
{
DataContractJsonSerializer serializer = new DataContractJsonSerializer(lobby.GetType());
MemoryStream memoryStream = new MemoryStream();
serializer.WriteObject(memoryStream, lobby);
// Return the results serialized as JSON
string json = Encoding.Default.GetString(memoryStream.ToArray());
returnValue = json;
}
return returnValue;
}
显然感谢我应该查看的任何建议或一般方向,但我已经浏览了大多数示例和教程,但可惜它们无济于事。 这是一个非常简单的测试,我使用一个数字执行 GET,服务读取该数字,将其分配给类的 ID 变量,然后我读取它,将其序列化并发送回。
【问题讨论】:
-
您遇到了什么具体问题?您在响应中发现哪些工件“奇怪”?
-
对不起,我会修改帖子以使其更清晰。如果可能的话,我想要直接的 JSON,没有“xmlns="schemas.microsoft.com/2003/10/Serialization"。感谢阅读:)
-
老实说,我在我的实现中没有看到这一点。但是,您可能希望将 ResponseFormat = WebMessageFormat.Json 添加到您的 WebGet 定义中。
-
嗨,洛基,感谢您的提示,它在某种程度上可以使用它,而且我似乎有更令人信服的 JSON,因为它在响应中引入了一些反斜杠并删除了 xmlns 部分,但是我是好奇是否有办法让我适应我的需要。哪些能够指定来自客户端的 GET 命令的响应格式,例如{format},我真的不想做两种单独的方法,一种用于 XML,一种用于 JSON,只是能够从一种方法响应。希望这是有道理的:)
-
@Rodney:如果不拦截 IDispatchMessageInspector 实现中的请求,您可能会遇到两种方法。但是,我还没有完全想通。所以,如果我想到什么,我会在稍后回复。祝你好运!
标签: wcf json serialization