【问题标题】:Reading WCF JSON Serialization读取 WCF JSON 序列化
【发布时间】: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


【解决方案1】:

你需要设置 BodyStyle 来摆脱它...

 [WebGet(UriTemplate = "xxx/xx/{gameID}/{format}"), BodyStyle = WebMessageBodyStyle.Bare ]

【讨论】:

  • 感谢您的回复,但这似乎并没有影响任何事情,我在上面 Rocky 的帖子中取得了一些成功。
猜你喜欢
  • 1970-01-01
  • 2012-09-27
  • 2011-01-18
  • 2013-10-09
  • 1970-01-01
  • 2013-03-01
  • 2011-10-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多