Ошибка десериализации JSON Невозможно десериализовать объект JSON в тип 'System.String' - PullRequest
3 голосов
/ 25 октября 2011

У меня есть следующий JSON:

{"workspace": {
  "name":"Dallas",
   "dataStores":"http://.....:8080/geoserver/rest/workspaces/Dallas/datastores.json",
   "coverageStores":"http://.....:8080/geoserver/rest/workspaces/Dallas/coveragestores.json",
   "wmsStores":"http://....:8080/geoserver/rest/workspaces/Dallas/wmsstores.json"}}

И я пытаюсь десериализовать в этом классе:

 class objSON {
        public string workspace { get; set; }
        public string name { get; set; }
        public string dataStores { get; set; }
        public string coverageStores { get; set; }
        public string wmsStores { get; set; }}

 objWS_JSON deserContWS = JsonConvert.DeserializeObject<objWS_JSON>(data);
           var coberturas = deserContWS.coverageStores;
           var almacenesDatos = deserContWS.dataStores;
           var almacenesWMS = deserContWS.wmsStores;
           var nombre = deserContWS.name;

И я получаю следующую ошибку:

Невозможно десериализовать объект JSON в тип 'System.String'.

Есть идеи?Спасибо

Ответы [ 3 ]

7 голосов
/ 25 октября 2011

Ваш JSON неверен для структуры класса, которую вы указали.JSON подразумевает, что name, dataStores, coverStores и wmsSTores являются дочерними для класса рабочей области.Я думаю, что структура класса, которую вы хотите, выглядит следующим образом:

public class workspace
{
    public string name { get; set; }
    public string dataStores { get; set;}
    public string coverageStores { get; set;}
    public string wmsStores {get; set;}
}

public class objSON
{
    public workspace workspace {get; set;}
}

попробуйте, если эта структура данных не та, что вам нужна, вам нужно изменить свой JSON.

Хорошо, ятолько что попробовал в примере приложения и, кажется, работает нормально.Вот код, который я использовал:

    class Program
    {
            static void Main(string[] args)
            {

               string str = @"{""workspace"": {
                  ""name"":""Dallas"",
                  ""dataStores"":""http://.....:8080/geoserver/rest/workspaces/Dallas/datastores.json"",
                  ""coverageStores"":""http://.....:8080/geoserver/rest/workspaces/Dallas/coveragestores.json      "",
                  ""wmsStores"":""http://....:8080/geoserver/rest/workspaces/Dallas/wmsstores.json""}}";

                 var obj = JsonConvert.DeserializeObject<objSON>(str);

    }

}

public class workspace
{
    public string name { get; set; }
    public string dataStores { get; set; }
    public string coverageStores { get; set; }
    public string wmsStores { get; set; }
}

public class objSON
{
    public workspace workspace { get; set; }
}
3 голосов
/ 25 октября 2011

В JSON workspace содержит все остальные, поэтому у вас должно быть что-то вроде:

class Container {
    public Workspace workspace { get; set; }
}

class Workspace {
    public string name { get; set; }
    public string dataStores { get; set; }
    public string coverageStores { get; set; }
    public string wmsStores { get; set; }
}

По крайней мере, это соответствует структуре JSON - будь тосработает или нет - другое дело :) 1007 *

0 голосов
/ 25 октября 2011

Если вы посмотрите на объект JSON (возможно, будет лучше, если вы выложите { и } чуть более четко), вы увидите, что он пытается сериализовать все эти данные в workspace поле, а не остальные свойства. Я ожидаю, что ваш объект будет выглядеть примерно так:

{
   "workspace": "whatever",
   "name":"Dallas",
   "dataStores":"http://.....:8080/geoserver/rest/workspaces/Dallas/datastores.json",
   "coverageStores":"http://.....:8080/geoserver/rest/workspaces/Madrid/coveragestores.json",
   "wmsStores":"http://....:8080/geoserver/rest/workspaces/Madrid/wmsstores.json"
}
...