我正在尝试在C#.NET中创建JSON Web服务。 json字符串通过web方法返回,但它包含xml结构,如:
<string xmlns="http://tempuri.org/">
{"checkrecord":[{"rollno":"abc2","percentage":40,"attended":12,"missed":34}],"Table1":[]}
</string>
我看到this文章之前对我没什么帮助。
所以我的问题是,json字符串不以纯格式返回。我不想要那个xml版本和xmlns字符串。我计划稍后在Android上使用网络服务。
任何人都可以帮助我吗?
由于
答案 0 :(得分:4)
如果使用请求和响应格式的属性修饰接口,则可以获得标准WCF以返回并解释正确的json。
[WebGet(UriTemplate = "user/{userid}", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
但问题是,WCF的先天DataContractJsonSerializer并不总是返回正确的json。它的字典序列化充其量是有问题的,因为它被序列化为键/值对的列表。要解决此问题,必须从服务方法返回Stream
并手动执行序列化(使用Json.NET或ServiceStack执行序列化)。在这种情况下,建议使用WebAPI,但在某些情况下,可以使用上述装饰来使用常规WCF。
答案 1 :(得分:2)
您可以尝试使用REST Api构建服务。您可以在此link
中找到有关使用WCF的REST的信息您可以下载有关如何构建返回json响应的restful wcf服务的示例工具包。
答案 2 :(得分:1)
如果您计划创建REST服务,WCF Web API值得学习。它可以通过Nuget或Codeplex
轻松安装答案 3 :(得分:1)
使用ServiceStack时这也不是问题,即您返回的每个结果都会自动转换为您想要的Response ContentType,即这是可以通过所有HTTP VERBS调用的简单Web服务的完整代码(GET, POST,PUT,DELETE)所有支持的格式(无需配置),即JSON,XML,HTML,JSV,CSV,SOAP,即使是直接HTML表单 x-www-form-urlencoded 或QueryString请求:
public class Hello {
public string Name { get; set; }
}
public class HelloResponse {
public string Result { get; set; }
}
public class HelloService : IService<Hello> {
public object Execute(Hello request)
{
return new HelloResponse { Result = "Hello, " + request.Name };
}
}
您可以使用接受:application / json HTTP标头覆盖您获得的响应,或者只是在QueryString上添加?format = json 。
请参阅ServiceStack's Hello World Example以查看上述网络服务的实时示例。
答案 4 :(得分:0)
更改方法中的返回
Context.Response.Write(ans);
Context.Response.End();