我不确定我是否在双序列化我的JSON对象,但输出结果是不需要的格式。我正在通过ArcGIS Server对象扩展(REST SOE)公开REST端点。我最近也实施了JSON.Net 这基本上允许我删除几行代码。

所以这里是处理程序,它是为服务创建数据的核心部分(对于您非GIS peeps)。

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字符串,然后将其添加到结果中 JsonObject.然后你打电话 ToJson() 在结果上,这大概是将整个事情再次序列化为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