Я принимаю этот результат от Api. Я не понимаю, какой класс нужно сконфигурировать, чтобы дессириализировать это.
"{
\"errors\":{\"Email\": [\"This field should be filled in\"],
\"Password\": [\"This field should be filled in\"]},
\"title\":\"One or more validation errors occurred.\",
\"status\":400,
\"traceId\":\"8000006c-0002-fe00-b63f-84710c7967bb\"
}"
я пишу эти классы для десериализации
public class Content
{
public List<Error> Errors { get; set; }
public string Tutle { get; set; }
public int Status { get; set; }
public string TraceId { get; set; }
}
public class Error
{
public string Email { get; set; }
public string Password { get; set; }
}
Newtonsoft.Json.JsonSerializationException: 'Cannot deserialize the current JSON object (e.g. {"name":"value"}) into type 'System.Collections.Generic.List`1[AppStore.WPF.Services.Helpers.Error]' because the type requires a JSON array (e.g. [1,2,3]) to deserialize correctly.
это было все позже и позже, на самом деле это не значит, как правильно написать класс
Я не понимаю, как написать класс, в котором нужно десериализовать. Необходимо создать 3 класса для основного, электронной почты и пароля. как использовать Ньютон я знаю.
Там есть сотни руководств, вы узнаете гораздо больше, пробежав их, чем задавая вопросы здесь.
Спасибо за обновление вашего вопроса, и благодаря этому у вас теперь есть ответ!
Вы можете использовать JSON.NET. Здесь много информации: https://www.newtonsoft.com/json/help/html/SerializingJSON.htm
Вы можете использовать динамический JObject или десериализовать конкретный класс
Это действительно должен быть комментарий.
@DavidG Я думаю, это отвечает на вопрос. Если бы вопрос был более конкретным, то и ответ был бы более конкретным. Я не буду описывать все возможные варианты, которые понятно описаны по ссылке. это было бы переписыванием документов, что не имеет смысла. Тем не менее, я уважаю ваше мнение.
Так вы говорите, что вопрос недостаточно хорош и на него не следует отвечать? :)
@Дэвид Г. Конечно, вопрос можно и лучше, но я не считаю зазорным давать общий ответ на общий вопрос. Возможно, автор Q не знает, с чего начать, и этот указатель может дать ему некоторые идеи. Я могу ошибаться, но иногда нужно попытаться понять намерение человека, задающего вопрос. если вы считаете, что Q плохой, понизьте его. Или попросить закрыть. Не вините в этом ответ ;)
Тогда если вопрос общий, то его надо задавать как таковой, а таких вопросов уже сотни. Поиск канонического дубликата будет более полезным для вас временем.
@DavidG Я призываю вас найти этот общий вопрос. Вы можете найти много конкретных вопросов о сериализации JSON, но я не думаю, что так просто найти общий вопрос, чтобы пометить его как дубликат. Ничего личного против вас ;)
В самом деле, так что иди и создай его, нам почти наверняка не помешал бы канонический C# JSON Q&A. Проблема с этим постом в том, что ОП не приложила никаких усилий. И да, ваш ответ точен, но в конечном итоге бесполезен.
Вы пытаетесь использовать:
public List<Error> Errors { get; set; }
public class Error
{
public string Email { get; set; }
public string Password { get; set; }
}
десериализовать:
\"errors\":{\"Email\": [\"This field should be filled in\"],
\"Password\": [\"This field should be filled in\"]},
Посмотрите внимательно на JSON (и сообщение об ошибке); Email
и Password
требуют массива строк. Гипотетический ответ от API может выглядеть так:
\"errors\":{\"Email\": [\"This field should be filled in\"],
\"Password\": [\"Password must be at least 8 characters\",
\"Password must contain at least one digit\"]
},
Первой попыткой исправить это может быть:
public class Error
{
public string[] Email { get; set; }
public string[] Password { get; set; }
}
Однако из контекста кажется вероятным, что Email
и Password
относятся к входным элементам, которые проверяются, и что результат может содержать другие элементы, например. PhoneNumber
:
\"errors\":{\"Email\": [\"This field should be filled in\"],
\"Password\": [\"This field should be filled in\"],
\"PhoneNumber\": [\"This field should be filled in\"]
},
так что вы действительно хотите десериализовать его как словарь, т.е. заменить:
public List<Error> Errors { get; set; }
к:
public Dictionary<string, string[]> Errors {get; set; }
Вы уже пробовали что-нибудь? Мы не собираемся писать код за вас, но будем рады помочь, если у вас возникнут проблемы.