문제

JSON 객체를 두 번 직렬화하는지 확실하지는 않지만 출력은 원하지 않는 형식을 만듭니다.ArcGIS 서버 오브젝트 확장 (REST SOE)을 통해 REST 끝점을 노출하고 있습니다.또한 최근에 몇 줄 코드를 제거 할 수있는 JSON.NET을 최근에 구현했습니다.

여기서 핸들러가 있습니다. 핸들러가 서비스의 데이터를 생성합니다 (비 GIS 엿봄).

private byte[] SearchOptionsResHandler(NameValueCollection boundVariables, string outputFormat, string requestProperties, out string responseProperties)
    {
        responseProperties = null;

        JsonObject result = new JsonObject();                                 

        // Towns
        DataTable dataTableTowns = GetDataTableTowns();
        String jsonStringTowns = JsonConvert.SerializeObject(dataTableTowns); 
        result.AddString("Towns", jsonStringTowns);

        // GL_Description
        DataTable dataTableGLDesc = GetDataTableGLDesc();
        String jsonStringGLDesc = JsonConvert.SerializeObject(dataTableGLDesc);                       
        result.AddString("GLDesc", jsonStringGLDesc);

        return Encoding.UTF8.GetBytes(result.ToJson());
    }
.

결과는 추한 Scaped JSON입니다.

{
    "Towns": "[{\"Column1\":\"ANSONIA\"},{\"Column1\":\"BETHANY\"},{\"Column1\":\"BLOOMFIELD\"}]",
    "GLDesc": "[{\"Column1\":\"Commercial\"},{\"Column1\":\"Industrial\"},{\"Column1\":\"Public\"}]"
}
.

어떻게 든 그것을 직렬화하고 있기 때문입니까?이것을 보게 해 주셔서 감사합니다.

도움이 되었습니까?

해결책

예, 당신은 더블 직렬화합니다.그것은 당신의 코드에 바로 있습니다.

데이터 테이블, dataTableTownsdataTableGLDesc의 각각에 대해 JsonConvert.SerializeObject()를 호출하여 JSON String으로 변환 한 다음 결과 JsonObject에 추가합니다.그런 다음 결과에 ToJson()를 호출합니다.이 작업은 아마도 JSON에 모든 것을 JSON에 직렬화합니다.

JsonObject는 json.net의 일부가 아니며 JsonConvert는 하나 또는 다른 하나를 사용하는 것이 좋습니다.일반적으로 모든 것을 단일 결과 객체에 축적 한 다음 끝에 한 번만 일렬로 직렬화하고 싶습니다.결과는 익명의 객체를 사용하여 json.net으로 어떻게 수행 할 수 있습니다.

var result = new 
{ 
    Towns = GetDataTableTowns(),
    GLDesc = GetDataTableGLDesc() 
};

string json = JsonConvert.SerializeObject(result);
return Encoding.UTF8.GetBytes(json);
.

여기에 출력이 있습니다.

{
    "Towns":[{"Column1":"ANSONIA"},{"Column1":"BETHANY"},{"Column1":"BLOOMFIELD"}],
    "GLDesc":[{"Column1":"Commercial"},{"Column1":"Industrial"},{"Column1":"Public"}]
}
.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top