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<Person> results = new List<Person>();
results.Add(new Person("Peyton", "Manning", 35));
results.Add(new Person("Drew", "Brees", 31));
results.Add(new Person("Tony", "Romo", 29));
// Serialize the results as JSON
DataContractJsonSerializer serializer = new DataContractJsonSerializer(results.GetType());
MemoryStream memoryStream = new MemoryStream();
serializer.WriteObject(memoryStream, results);
// Return the results serialized as JSON
string json = Encoding.Default.GetString(memoryStream.ToArray());
return json;
}
}
WCF 서비스에서 "깨끗한" JSON을 반환하려면 어떻게 해야 합니까?감사해요!
GetResults의 반환 유형을 다음과 같이 변경합니다.List<Person>
.
목록을 json 문자열로 일련화하기 위해 사용하는 코드를 제거합니다. WCF는 자동으로 이 작업을 수행합니다.
사용자 클래스에 대한 정의를 사용하면 다음 코드가 작동합니다.
public List<Person> GetPlayers()
{
List<Person> players = new List<Person>();
players.Add(new Person { FirstName="Peyton", LastName="Manning", Age=35 } );
players.Add(new Person { FirstName="Drew", LastName="Brees", Age=31 } );
players.Add(new Person { FirstName="Brett", LastName="Favre", Age=58 } );
return players;
}
결과:
[{"Age":35,"FirstName":"Peyton","LastName":"Manning"},
{"Age":31,"FirstName":"Drew","LastName":"Brees"},
{"Age":58,"FirstName":"Brett","LastName":"Favre"}]
(모두 한 줄에)
메서드에서도 다음 Atribute를 사용했습니다.
[WebInvoke(Method = "GET",
RequestFormat = WebMessageFormat.Json,
ResponseFormat = WebMessageFormat.Json,
UriTemplate = "players")]
Method= "GET"의 WebInvoke는 WebGet과 동일하지만 일부 메서드가 POST이기 때문에 일관성을 위해 모든 WebInvoke를 사용합니다.
UriTemplate는 메서드를 사용할 수 있는 URL을 설정합니다.그래서 나는 GET을 할 수 있다.http://myserver/myvdir/JsonService.svc/players
효과가 있습니다.
또한 IIRF 또는 다른 URL 리라이터를 체크하여 URI 내의 .svc를 삭제합니다.
서비스 클래스에 속성을 하드코딩하지 않고 nice json을 원하는 경우
사용하다<webHttp defaultOutgoingResponseFormat="Json"/>
동작 설정
이것은, Web 서비스의 web.config 로 실시합니다.bindingBehavior를 <webHttp>로 설정하면 클린 JSON이 표시됩니다.추가 "d"는 덮어쓸 필요가 있는 기본 동작으로 설정됩니다.
다음 블로그 포스트를 참조하십시오.http://blog.clauskonrad.net/2010/11/how-to-expose-json-endpoint-from-wcf.html
같은 문제에 직면하여 BodyStyle 속성값을 WebMessageBodyStyle로 변경하여 해결했습니다.베어" :
[OperationContract]
[WebGet(BodyStyle = WebMessageBodyStyle.Bare, RequestFormat = WebMessageFormat.Json,
ResponseFormat = WebMessageFormat.Json, UriTemplate = "GetProjectWithGeocodings/{projectId}")]
GeoCod_Project GetProjectWithGeocodings(string projectId);
반환된 개체는 더 이상 래핑되지 않습니다.
GET Method를 사용하는 경우 계약은 다음과 같아야 합니다.
[WebGet(UriTemplate = "/", BodyStyle = WebMessageBodyStyle.Bare, ResponseFormat = WebMessageFormat.Json)]
List<User> Get();
boot 파라미터가 없는 json이 있습니다.
Aldo Flores @alduar http://alduar.blogspot.com
IServece.cs에서 BodyStyle = WebMessageBodyStyle 태그를 추가합니다.벌거벗은
[WebInvoke(Method = "GET", ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Bare, UriTemplate = "Getperson/{id}")]
List<personClass> Getperson(string id);
언급URL : https://stackoverflow.com/questions/2086666/how-do-i-return-clean-json-from-a-wcf-service
'programing' 카테고리의 다른 글
Wordpress 역할 사용자 지정 기능이 true로 설정되었지만 false를 반환합니다. (0) | 2023.03.10 |
---|---|
Next.js에서 "필요한 매개 변수(id)가 getStaticPaths에서 문자열로 제공되지 않았습니다" 오류가 발생했습니다. (0) | 2023.03.10 |
Mamp localhost의 해결이 매우 느리다 (0) | 2023.03.10 |
jQuery가 AJAX의 JSON을 구문 분석하지 않음 (0) | 2023.03.10 |
LOCAL HOST에 woocommerce 플러그인을 설치할 수 없습니다. (0) | 2023.03.10 |