Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net RESTful服务返回包装在XML序列化标记中的JSON?_.net_Json.net - Fatal编程技术网

.net RESTful服务返回包装在XML序列化标记中的JSON?

.net RESTful服务返回包装在XML序列化标记中的JSON?,.net,json.net,.net,Json.net,我有一个服务,它试图将列表序列化为JSON(使用JSON.NET)并作为字符串返回。这一切都很好,但是我的JSON已经包装好了,我不知道为什么 <string xmlns="http://schemas.microsoft.com/2003/10/Serialization/">[{"DoNotSolicitID":5,"FirstName":"test","LastName":"mcTest","Address1":"11 Elm St","Address2":null,"City

我有一个服务,它试图将列表序列化为JSON(使用JSON.NET)并作为字符串返回。这一切都很好,但是我的JSON已经包装好了,我不知道为什么

<string xmlns="http://schemas.microsoft.com/2003/10/Serialization/">[{"DoNotSolicitID":5,"FirstName":"test","LastName":"mcTest","Address1":"11 Elm St","Address2":null,"City":"testville","State":null,"Zip":null,"Zip4":null,"Email":"test@mcTest.com","Phone":null,"BusinessName":null,"PartnerID":"3","Origination":"RDI"},{"DoNotSolicitID":6,"FirstName":"test","LastName":"mcTest","Address1":"11 Elm St","Address2":null,"City":"testville","State":null,"Zip":null,"Zip4":null,"Email":"test@mcTest.com","Phone":null,"BusinessName":null,"PartnerID":"3","Origination":"RDI"}]</string>
因此,我在rsponse中设置ContentType,并在服务方法中返回一个字符串作为简单输出。这是我正在实现的接口:

[OperationContract]
    [WebGet(UriTemplate = "/{guid}/search/json?fname={firstname}&lname={lastname}&phone={phone}&email={email}&add1={address1}&add2={address2}&city={city}&state={state}&zip5={zip5}")]
    string LookupRecord(string guid, string firstname, string lastname, string phone, string email, string address1, string address2, string city, string state, string zip5);

也许WebGet中的某些内容需要显式格式化为JSON?

如果您使用处理程序方法的WebGet/WebInvoke属性,您可能需要将ResponseFormat设置为JSON

我的问题是没有将上下文的OutgoingResponse.Format设置为JSON。在我的情况下,有效JSON响应的上下文代码是

context.ContentType = "application/json";
context.StatusCode = HttpStatusCode.OK;
context.Format = WebMessageFormat.Json;

奇怪的是,在web方法上设置属性没有任何作用,我必须显式地设置上下文。因为我需要处理XML和JSON响应,所以这似乎是我找到的最好的方法。

不要在
WebMethod中返回字符串,请使用:

JavaScriptSerializer js = new JavaScriptSerializer();
Context.Response.Write(js.Serialize(YOUR_STRING_TO_OUTPUT));

你的服务是ASMX吗?WCF?WCF网络API?如果您使用的是ASMX或WCF,那么您对HTTP流没有控制权,因此框架可能会在其中使用一些东西,以使数据适合任何返回内容类型。好的,那么当在WCF RESTful服务中返回JSON时,是否有首选的返回类型?是,
application/json
是json的首选返回类型。尝试了它,得到了相同的结果…json用XML包装。刚刚做了一个快速测试,使用[WebGet(UriTemplate=“test/{value}”)]我得到了XML信封,但是使用[WebGet(ResponseFormat=WebMessageFormat.json,UriTemplate=“test/{value}”)我得到了纯json,因此,我提出了我的建议,但我没有与您相同的响应上下文,因此可能会发生变化。如果要让您的方法使用JSON ResponseFormat属性返回字符串“hello world”或其他内容,您会得到原始JSON吗?我试过WebGet和WebInvoke,都设置了ResponseFormat,到目前为止,都是一样的。我会再玩一点,谢谢。@BryanGrimes:是的,我确实得到了原始JSON。然而,我在一个相当标准的设置上尝试了这一点,而您有一些定制,很高兴您在设置context.Format字段时找到了解决方案!
context.ContentType = "application/json";
context.StatusCode = HttpStatusCode.OK;
context.Format = WebMessageFormat.Json;
JavaScriptSerializer js = new JavaScriptSerializer();
Context.Response.Write(js.Serialize(YOUR_STRING_TO_OUTPUT));