Сбой сериализации/привязки полезной нагрузки XML ASP.NET Core XMLC#

Место общения программистов C#
Ответить
Anonymous
 Сбой сериализации/привязки полезной нагрузки XML ASP.NET Core XML

Сообщение Anonymous »

Я создаю конечную точку API, в которой XML действительно полезен для управления данными. Однако сериализация не удалась.
У меня есть три проблемы:
  • Как я могу иметь свойства, допускающие значение NULL? Свойство будет иметь значение null, если соответствующий тег/атрибут не установлен.
  • Как применить ограничения типа? Установка атрибута XmlElement.DataType приводит к сбою сериализации.
  • Почему моя сериализация не удалась?

Код: Выделить всё

public class XmlPortfolio
{
[XmlElement("text")]
[JsonPropertyName("text")]
public List TextParts { get; set; } = [];

[XmlElement("card")]
[JsonPropertyName("card")]
public List GameCards { get; set; } = [];
}

public class XmlPortfolioTextPart
{
[XmlAttribute("centered")]
public bool? Centered { get; set; }

[XmlAttribute("header")]
[Range(0, 6)]
public uint? Header { get; set; }

[XmlText]
public string Content { get; set; } = string.Empty;
}

public class XmlGameCard
{
[XmlElement("place-id")]
[JsonPropertyName("place-id")]
public ulong PlaceId { get; set; }

[XmlElement("work-period")]
[JsonPropertyName("work-period")]
public XmlWorkPeriod WorkPeriod { get; set; } = null!;

[StringLength(20, MinimumLength = 5)]
public string Role { get; set; } = string.Empty;
}

public class XmlWorkPeriod
{
[XmlAttribute("begin", DataType = "date")]
public DateOnly Begin { get; set; }

[XmlAttribute("end", DataType = "date")]
public DateOnly? End { get; set; }
}

public class XmlUpdatePortfolioContentRequest
{
[Required]
[XmlElement(ElementName = "schema-version")]
[XmlText]
[JsonPropertyName("schema-version")]
public string SchemaVersion { get; set; } = string.Empty;

[Required]
[XmlElement("portfolio")]
public XmlPortfolio Portfolio { get; set; } = null!;
}
Действие контроллера:

Код: Выделить всё

[Consumes("application/xml")]
public async Task Update([FromBody] XmlUpdatePortfolioContentRequest req)
{
return Ok();
}
Мои полезные данные XML

Код: Выделить всё


string

Hello World!

0

string



Ответ:

Код: Выделить всё

{
"title": "One or more validation errors occurred.",
"status": 400,
"errors": {
"": [
"An error occurred while deserializing input data."
],
"req": [
"The req field is required."
]
},
"traceId": "00-57f5276ed3d1b4db642be9cad6e86d28-7eb32ac14164d3f9-00"
}
Даже если я сделаю все свойства ненулевыми, привязка модели все равно не удастся. Кажется, проблема заключается в классе XmlGameCard, поскольку, когда я исключаю его и удаляю значение NULL из всех свойств, проверка завершается успешно.


Подробнее здесь: https://stackoverflow.com/questions/792 ... ding-fails
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»