Я работал над проектом API, и получил вопрос ниже,
это Json я прохожу
{
"MainClass": [
{
"Text": ".",
"Id": {
"System.Guid": "06073a9c-9cef-4f07-9180-2e54e0fa6416"
}
}
]
}
Это мои модели С#
public class MainClass {
public List<SubClass> Subs {get;set;}
}
public class SubClass {
public string Text {get;set;}
public Guid Id {get;set;}
}
Когда я передаю вышеупомянутый JSON, я получаю ошибку ниже
{"Message": "Запрос недействителен.", "ModelState": {"MainClass.SubClass [0].Id": ["Ошибка десериализации Json. Неподдерживаемый тип: System.Guid"]}}
Я пробовал ниже Json также,
{
"MainClass": [
{
"Text": ".",
"Id": "06073a9c-9cef-4f07-9180-2e54e0fa6416"
}
]
}
Как я могу это исправить?
Это происходит, когда я публикую JSON с помощью почтальона. Я вижу, что он попадает в контроллер, но не в действие. Выдает ошибку, сказав, как указано выше.
1) Для вашего первого JSON,
{
"MainClass": [
{
"Text": ".",
"Id": {
"System.Guid": "06073a9c-9cef-4f07-9180-2e54e0fa6416"
}
}
]
}
Вам нужно создать еще одну модель класса для хранения свойства типа Guid,
public class RootClass
{
public List<MainClass> MainClass { get; set; }
}
public class MainClass
{
public string Text { get; set; }
public _Guid Id { get; set; }
}
public class _Guid
{
[JsonProperty("System.Guid")]
public Guid Id { get; set; }
}
Использование:
RootClass mainClass = JsonConvert.DeserializeObject<RootClass>(json);
mainClass.MainClass.ForEach(x => Console.WriteLine("Text:\t" + x.Text + "\n" + "Id:\t" + x.Id.Id));
2) И для вашего второго JSON,
{
"MainClass": [
{
"Text": ".",
"Id": "06073a9c-9cef-4f07-9180-2e54e0fa6416"
}
]
}
Вам нужна иерархия классов ниже, чтобы десериализовать ваш JSON правильно,
public class RootClass
{
public List<MainClass> MainClass { get; set; }
}
public class MainClass
{
public string Text { get; set; }
public Guid Id { get; set; } //<= The type "System.Guid" as it is
}
Использование:
RootClass mainClass = JsonConvert.DeserializeObject<RootClass>(json);
mainClass.MainClass.ForEach(x => Console.WriteLine("Text:\t" + x.Text + "\n" + "Id:\t" + x.Id));
Выход: (для обоих выше JSON)
вам нужны следующие файлы классов
public class Id
{
[JsonProperty("System.Guid")]
public string System_Guid { get; set; }
}
public class MainClass
{
public string Text { get; set; }
public Id Id { get; set; }
}
public class rootClass
{
public List<MainClass> MainClass { get; set; }
}
Я обычно использую генератор JSON, как эти объекты
И вот, результат в том, что
public class Id
{
public string MyGuid { get; set; }
}
public class MainClass
{
public string Text { get; set; }
public Id Id { get; set; }
}
public class RootObject
{
public List<MainClass> MainClass { get; set; }
}
Вы не можете использовать имя System.Guid в качестве имени свойства.
ВАЖНО: десериализовать объект следующим образом;
RootObject myObject = Newtonsoft.Json.JsonConvert.DeserializeObject<RootObject>(json.Replace("System.Guid","MyGuid"));