Lokesh Kondapalli Ответов: 4

десериализовать JSON с жалом список genric ( ошибка преобразование значения к типу... с типом системы'.Коллекции.Generic.List`1 . Path '


Здравствуйте друзья,

здесь я столкнулся с небольшой проблемой при десериализации строки json в список

строка json : результат работы службы restful
"\"[{\\\"UName\\\":\\\"prasad\\\",\\\"LastName\\\":\\\"k\\\",\\\"FirstName\\\":\\\"sai\\\"}]\""

и я хочу преобразовать эту строку json в список класса "_TempUser"

мой список :
public class _TempUser
      {

          public string UName
          {
              get;
              set;

          }


          public string LastName
          {
              get;
              set;
          }

          public string FirstName
          {
              get;
              set;
          }
      }


Ошибка есть
Error converting value "[{"UName":"prasad","LastName":"k","FirstName":"sai"}]" to type 'System.Collections.Generic.List`1[loginServices.Login_Service+_TempUser]'. Path '', line 1, position 70.


код в моем restful сервисе
List<_TempUser> List = new List<_TempUser>();

_TempUser ud = new _TempUser();

           ud.UName = "prasad";
           ud.FirstName = "sai";
           ud.LastName = "k";
           List.Add(ud);

           string json = JsonConvert.SerializeObject(List);

           return json;


код : для вызова службы restful
 var httpWebRequest = (HttpWebRequest)WebRequest.Create("http://IpAddress:Post/Login/RestServiceName.svc/RestMethoName");
            httpWebRequest.ContentType = "text/json";
            httpWebRequest.Method = "POST";
            using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream()))
            {
                string json =JsonConvert.SerializeObject(Req);
                streamWriter.Write(json);
                streamWriter.Flush();
                streamWriter.Close();

                var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();
                using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
                {
                    string result =  streamReader.ReadToEnd();
                  
// here am converting json string to "_TempUser" List 

                    List<_TempUser> List = new List<_TempUser>();  

                    List = JsonConvert.DeserializeObject<List<_TempUser>>result   
                }

            }


любые изменения или предложения плз?

Sergey Alexandrovich Kryukov

Где вы видите список? Это ассоциативный контейнер Javascript (все массивы Javascript таковы). Один такой объект.
—СА

Lokesh Kondapalli

Здравствуйте , мне очень жаль, что я не довел вас сюда своим простым вопросом

получаю json-строку типа "\"{\\"UName\\":\\"prasad\\",\\"LastName\\":\\"k\\",\\"FirstName\\":\\"sai\\\"}\""

и я хочу преобразовать эту строку в свой список : "list<_TempUser>"

возможно ли это ?

Sergey Alexandrovich Kryukov

Неверный вопрос. Нет никакого списка. Если вам нужен список, сделайте его. Десериализуйте его в _TempUser, составьте список (почему? почему?!) с этим единственным элементом.
—СА

Lokesh Kondapalli

я возвращаюсь с моей спокойной службы вот так

Список<_TempUser> Список = новый список<_TempUser&ГТ;();
Список.Добавить(уд);

строка json = JsonConvert.SerializeObject(список);

вернуть в формате JSON;

с помощью библиотеки DLL newtonsoft json на стороне сервера и клиента для сериализации и десериализации

4 Ответов

Рейтинг:
23

Lokesh Kondapalli

это временное решение, если кто-то когда-то получил точное решение, Пожалуйста, дайте мне знать.

 using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
                {
                    string result =  streamReader.ReadToEnd();
                  
// here am converting json string to "_TempUser" List 

 // before that am removing special characters 
  //  string is "\"[{\\\"UName\\\":\\\"prasad\\\",\\\"LastName\\\":\\\"k\\\",\\\"FirstName\\\":\\\"sai\\\"}]\""

  string s = result.Replace(@"\", string.Empty);

// after this   string is 
//  "[{"UName":"sravi","LastName":"last","FirstName":"firest"}]"

                  string final= s.Trim().Substring(1,(s.Length)-2);

// after this   string is 
//  [{"UName":"sravi","LastName":"last","FirstName":"firest"}]

                    List<_TempUser> List = new List<_TempUser>();  
 
                    List = JsonConvert.DeserializeObject<list><_tempuser>>(final)
               }
</_tempuser></list>


это прекрасно работает для меня ;)

если у заса проверить УР в JSON строку действительное или просто не использовать эту ссылку

http://jsonlint.com/[^]


Рейтинг:
0

Sergey Alexandrovich Kryukov

Пожалуйста, смотрите мой комментарий к этому вопросу. У вас есть только один пример _TempUser- Это не имеет никакого отношения к делу . List- ни в коем случае. Это пример сериализации: http://stackoverflow.com/questions/18711721/jsonconvert-deserializeobjecttjsonstring-returning-all-propertiest-as-null[^].

—СА


Lokesh Kondapalli

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

"\"[{\\\"Команде uname\\\":\\\"Прасад\\\",\\\"фамилия\\\":\\\"к\\\",\\\"имя\\\":\\\"Саи\\\"}]\""

Sergey Alexandrovich Kryukov

- Делай или не делай. Нет никакой попытки". Почему вы повторяете эту строку? Я уже видел это. Мой ответ должен объяснить вам все. Что еще непонятно?
—СА

Lokesh Kondapalli

видя ответ ur, я понимаю только то, что... "JSON не соответствует именам свойств", но его совершенно другое здесь имеет точное имя в службе, а также на стороне клиента, так как я могу исправить это, только видя ссылку ur ? это правильная ссылка для моего вопроса ?

Sergey Alexandrovich Kryukov

О чем ты говоришь?! Может быть, вы видели чей - то ответ? :-)
Я не могу понять, что вы упускаете, возможно, что-то очень простое...
Связь? Образец соответствует почти один к одному тому, что вы должны иметь. Что тут может быть непонятного?
—СА

Lokesh Kondapalli

http://stackoverflow.com/questions/18711721/jsonconvert-deserializeobjecttjsonstring-returning-all-propertiest-as-null

я думаю, что это точная ссылка, которую вы разместили для моего вопроса.
в url-ссылке я видел ответ, что "JSON не соответствует именам свойств в вашем классе"
но это не в моем случае .


да, я упускаю что-то основное и ошибка возникает из-за этих специальных символов.

и без этих персонажей он работает нормально
эта строка [{"UName":"prasad","LastName":"last","FirstName":"firest"}] я зарегистрировался
http://www.jsoneditoronline.org/

Sergey Alexandrovich Kryukov

Ты серьезно?! Конечно, это не ваша проблема! Только пример кода такой же, как у вас. Вы хотите, чтобы кто-нибудь исправил ваш код для вас. Штраф: выкидываем список<_TempUser> и заменить на <_TempUser&ГТ; везде в своем коде. Вот и все.
—СА

Lokesh Kondapalli

нет, сэр, я не серьезно... просто я хочу чтобы задание было выполнено вот и все и очень благодарен Вам за ваш ответ :)


<_Temp> u означает класс _Temp вместо списка

Sergey Alexandrovich Kryukov

Да, именно это я и имею в виду. Ваше имя класса-_TempUser.
Вы не сможете решить никаких проблем, если будете сопротивляться вместо того, чтобы сотрудничать. По крайней мере, так это выглядит... Что-нибудь еще неясно?
—СА

Lokesh Kondapalli

Да, сэр, это ясно, но даже попробуйте с ошибкой класса, возникающей вот так

"\"{\\\"Команде uname\\\":\\\"Прасад\\\",\\\"фамилия\\\":\\\"к\\\",\\\"имя\\\":\\\"Саи\\\"}\""


я сделал временное решение для этого : удалив специальные символы. так что он прекрасно работает как для списка, так и для класса

строка s = результат.Заменить(@"\", строка.Пустой);
строки финал= С. Отделка().Подстрока(1,(С. Длина)-2);

это временное решение,но мне нужно постоянное решение для динамического формата

и спасибо вам сэр за то что потратили свое драгоценное время :)

Member 10679807

Сергей, почему у тебя такой плохой тон, парень явно просто хотел помочь.

Sergey Alexandrovich Kryukov

Вот почему я пытался помочь. Тон не очень плохой, это просто то, что вы думаете. Если в ответ на попытку помочь кто-то ведет себя недостаточно совместно или просто недостаточно терпеливо, лучшей помощью будет попытка исправить такое поведение. Я не вижу в этом ничего плохого.

Спасибо за понимание.

—СА

Рейтинг:
0

Swetha M.S

Вы можете просто использовать функцию escape() в javascript.Это ссылка, где вы можете найти решение для экранирования специальных символов в формате json

http://stackoverflow.com/questions/21565404/jsonconvert-deserializeobject-special-characters-unterminated-string-expected-d[^]


Рейтинг:
0

Member 13637300

Проверьте тип данных, которые вы отправляете в заголовке, который я имею в виду MediaTypeWithQualityHeaderValue ("text / plain") <- поскольку это может быть "application / Json" или "text / json", этот тип может изменить сериализацию.

В моем случае я изменил его на text / plain, и это сработало

Я надеюсь быть полезным


an0ther1

Этот вопрос был поднят 4 года назад и имеет общепринятый ответ.
Ответы на старые вопросы приведут к снижению голосов.

с уважением