Как десериализовать JSON в список?

#c# #.net #json #asp.net-mvc #serialization

#c# #.net #json #asp.net-mvc #сериализация

Вопрос:

У меня есть сериализованная строка JSON serializedClaims

 var claims = new List<Claim>();

claims.Add(new Claim("MakerId", "939393", ClaimValueTypes.String));
claims.Add(new Claim(ClaimTypes.DateOfBirth, "1956-03-08", ClaimValueTypes.Date));

var serializedClaims = JsonConvert.SerializeObject(claims); 
  

Теперь я хочу десериализовать serializedClaims обратно в List<Claim> .

Как это сделать?

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

1. JsonConvert.DeserializeObject<List<Claim>>(serializedClaims); Не работает?

2. Нет, это не так, выдает ошибку «Не удается найти конструктор для System. Безопасность. Претензии. Утверждение»

3. @GilliVilla Вы должны добавить конструктор в свой Claim класс.

4. В частности, вам нужно добавить конструктор по умолчанию, поэтому public Claim() {...} . Это потому, что под прикрытием JsonConvert выполняется итерация по объектам JSON в serializedClaims и для каждого создается новый Claim с использованием конструктора по умолчанию и с использованием отражения для заполнения свойств этого объекта с использованием записей с аналогичными именами в объекте JSON.

Ответ №1:

Вы можете сделать, указав List<Claim> тип при преобразовании

 var dserializedClaims = JsonConvert.DeserializeObject<List<Claim>>(serializedClaims); 
  

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

1. Это должно быть JsonConvert.DeserializeObject<List<Claim>>(... .

2. Теперь это похоже на ответ Nihal Rp.

Ответ №2:

Вы могли бы сделать

 List<Claim> deserializedClaims = JsonConvert.DeserializeObject<List<Claim>>(serializedClaims);
  

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

1. Нет. Ошибки отсутствуют.

Ответ №3:

Вы можете десериализовать OBJECT с помощью JsonConvert, и вы также указали его настройки для формата данных json.Нравится

       var settings = new JsonSerializerSettings
        {
            ContractResolver = new CamelCasePropertyNamesContractResolver(),
            NullValueHandling = NullValueHandling.Ignore,
            DateParseHandling = DateParseHandling.None
        };
       List<Claim> claims =JsonConvert.DeserializeObject<List<Claim>>(serializedClaims, settings);
  

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