Используйте JavaScriptSerializer для десериализации объекта при переносе JSON

#c# #json #javascriptserializer

#c# #json #javascriptserializer

Вопрос:

Пример JSON:

 {
  "1":{
       "guid":"8a40135230891fa70130891ff1000009",
       "portalId":23832
      }
}
  

Код, который я использую для десериализации, является:

 var serializer = new JavaScriptSerializer();
var lead = serializer.Deserialize<WebHookResponse>([json]);
  

Код, который я использую с кодом десериализации, является:

 public class WebHookResponse
{
  public HubspotRecord Record { get; set; }
}
  

Код, который составляет HubspotRecord, опущен. Когда я запускаю процесс с данными json, которые не заключены за «1», он работает отлично.

В настоящее время я думаю, что моя проблема заключается в том, что json заключен в «1». Я не могу использовать атрибуты с JavaScriptSerializer, и я не могу создать корневой элемент, помеченный как «1» из-за соглашений об именовании.

Есть какие-нибудь мысли?

Ответ №1:

Попробуйте дать десериализации это сделать Dictionary<string, HubspotRecord> или Dictionary<string, WebHookResponse> . Я не могу сказать, что JavaScriptSerializer часто использовал, но я ожидаю, что он создаст запись в базе данных с ключом «1» и соответствующим значением. В любом случае стоит попробовать 🙂

В качестве альтернативы вы можете захотеть загрузить его в Json.Преобразуйте в DOM-подобную структуру и просто десериализуйте тот бит, который вам действительно нужен.

Комментарии:

1. Быстрый ответ. И очень хороший. var dictionary = serializer.Deserialize<Dictionary<string, HubspotRecord>>(result);

2. Превосходно ! У меня возникали исключения при попытке использовать jarrays на устройстве iOS с помощью Xamarin / JSON.Net. Это решение было хорошей альтернативой.