#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 и обеспечить обработку анализа даты