REST SOE C #에서 이중 직렬화 된 JSON 객체 만들기 #
-
21-12-2019 - |
문제
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\"}]"
}
.
어떻게 든 그것을 직렬화하고 있기 때문입니까?이것을 보게 해 주셔서 감사합니다.
해결책
예, 당신은 더블 직렬화합니다.그것은 당신의 코드에 바로 있습니다.
데이터 테이블, dataTableTowns
및 dataTableGLDesc
의 각각에 대해 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"}]
}
. 제휴하지 않습니다 StackOverflow