programing

WCF 서비스에서 클린 JSON을 반환하려면 어떻게 해야 하나요?

megabox 2023. 3. 10. 21:24
반응형

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

반응형