2013-11-16 4 views
1

Я не уверен, что я дважды сериализую свой объект JSON, но результат приводит к нежелательному формату. Я просматриваю конечную точку REST через расширение объекта ArcGIS Server (REST SOE). Недавно я реализовал JSON.Net, что позволило мне удалить несколько строк кода.Создание двойного сериализованного объекта JSON в REST SOE C#

Итак, вот обработчик, который является основной частью, создающей данные для службы (для вас не ГИС-подглядывает).

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\"}]" 
} 

Это потому, что я дважды сериализации это как-то? Спасибо, что посмотрели на это.

ответ

1

Да, вы дважды сериализуете его. Это прямо в вашем коде.

Для каждой из таблиц данных, dataTableTowns и dataTableGLDesc, вы вызываете 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"}] 
} 
+0

Отлично. Я купил вам виртуальное пиво. Спасибо, что поняли это, и я также думаю, что сделаю переход на JSON.Net. – ripsin

+0

Спасибо за пиво. знак равно –