如何从WCF服务返回干净的JSON?

11 浏览
0 Comments

如何从WCF服务返回干净的JSON?

我正在尝试从一个WCF服务返回一些JSON。该服务仅从我的数据库返回一些内容。我可以获取数据。然而,我对我的JSON格式有些担忧。目前,返回的JSON格式如下:

{"d":"[{\"Age\":35,\"FirstName\":\"Peyton\",\"LastName\":\"Manning\"},{\"Age\":31,\"FirstName\":\"Drew\",\"LastName\":\"Brees\"},{\"Age\":29,\"FirstName\":\"Tony\",\"LastName\":\"Romo\"}]"} 

实际上,我希望我的JSON格式尽可能地干净整洁。我相信(可能我错了),同样的结果集在干净的JSON中应该像这样:

[{

"Age": 35,

"FirstName": "Peyton",

"LastName": "Manning"

}, {

"Age": 31,

"FirstName": "Drew",

"LastName": "Brees"

}, {

"Age": 29,

"FirstName": "Tony",

"LastName": "Romo"

}]

我不知道“d”是从哪里来的。我也不知道为什么会插入转义字符。我的实体类如下所示:

[DataContract]
public class Person
{
    [DataMember]
    public string FirstName { get; set; }
    [DataMember]
    public string LastName { get; set; }
    [DataMember]
    public int Age { get; set; }
    public Person(string firstName, string lastName, int age)
    {
        this.FirstName = firstName;
        this.LastName = lastName;
        this.Age = age;
    }
}

负责返回内容的服务定义如下:

[ServiceContract(Namespace = "")]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class TestService
{
    [OperationContract]
    [WebGet(ResponseFormat = WebMessageFormat.Json)]
    public string GetResults()
    {
        List results = new List();
        results.Add(new Person("Peyton", "Manning", 35));
        results.Add(new Person("Drew", "Brees", 31));
        results.Add(new Person("Tony", "Romo", 29));
        // 将结果序列化为JSON
        DataContractJsonSerializer serializer = new DataContractJsonSerializer(results.GetType());
        MemoryStream memoryStream = new MemoryStream();
        serializer.WriteObject(memoryStream, results);
        // 返回序列化为JSON的结果
        string json = Encoding.Default.GetString(memoryStream.ToArray());
        return json;
    }
}

如何从WCF服务返回“干净”的JSON?

谢谢!

0
0 Comments

问题:如何从WCF服务返回干净的JSON?

原因:WCF服务默认返回的JSON中会包含额外的"[d]",需要修改默认行为。

解决方法:通过在web.config文件中设置bindingBehavior为<webHttp>来实现。此设置将返回干净的JSON,覆盖了默认行为。可以参考以下博客文章获取更多信息:http://blog.clauskonrad.net/2010/11/how-to-expose-json-endpoint-from-wcf.html

0
0 Comments

问题的出现原因:

如果想要从WCF服务返回清晰的JSON,而又不想在服务类中硬编码属性,我们需要找到一种解决方法。

解决方法:

在行为配置中使用<webHttp defaultOutgoingResponseFormat="Json"/>

以下是一种可能的解决方案:

WCF服务是一种用于构建分布式系统的强大工具。然而,在返回JSON数据时,有时候我们可能希望得到一个干净整洁的JSON对象,而不是带有额外属性或格式的JSON。

下面介绍一种方法,可以帮助我们从WCF服务返回干净的JSON。

解决方法是在行为配置中使用<webHttp defaultOutgoingResponseFormat="Json"/>。这个配置的作用是将默认的输出响应格式设置为JSON。

以下是一个示例:


  
    
      
    
  

通过将上述配置添加到WCF服务的行为配置中,我们可以确保返回的JSON数据是干净、整洁的。

通过在WCF服务的行为配置中添加<webHttp defaultOutgoingResponseFormat="Json"/>,我们可以从WCF服务返回干净的JSON数据,而不需要在服务类中硬编码属性。这种方法可以帮助我们更好地处理JSON数据,并提供更好的用户体验。

0
0 Comments

问题的原因是返回的JSON格式不符合要求,解决方法是更改返回类型为List,并使用WCF自动序列化功能。另外,还需要在方法上使用WebInvoke属性,并设置Method为"GET",同时设置UriTemplate为"players"。最后,可以考虑使用URL重写工具来去掉URI中的.svc后缀。如果出现错误提示"Endpoints using 'UriTemplate' cannot be used with 'System.ServiceModel.Description.WebScriptEnablingBehavior'",需要将.config文件中的标签替换为标签。

0