Удалите пустой xml-тег из запроса на публикацию ASP Net Web API

#c# #asp.net-core #asp.net-core-webapi #xmlserializer #inputformatter

Вопрос:

Я хочу удалить пустой XML-тег из запроса POST на основе XML в ASP.NET Основной ВЕБ-API. Пустой тег XML мешал мне десериализовать XML для моделирования с помощью XmlSerializerFormatters.

 <?xml version = "1.0" encoding="UTF-8"?>
<DetailAssessmentRequest>
    <CaseId></CaseId>
    ...

    <LeisureTimeActivities>
        <LeisureTimeActivity>1</LeisureTimeActivity>
        <LeisureTimeActivity/>  //want to remove this
        <LeisureTimeActivity>2</LeisureTimeActivity>
        <LeisureTimeActivity/>  //want to remove this
    </LeisureTimeActivities>
    <LeisureTimeActivityOthers></LeisureTimeActivityOthers>  //want to remove this
    ...

    <Observation>Comments</Observation>
</DetailAssessmentRequest>
 

Я уже добавил XmlSerializerFormatters и XmlDataContractSerializerFormatters в свой Startup.cs

 services.AddMvc()
     .AddXmlSerializerFormatters()
     .AddXmlDataContractSerializerFormatters();
 

Вот моя модель:

 [Serializable]
public class DetailAssessmentRequest
{ 
    public int CaseId { get; set; }
    ...

    [XmlArray("LeisureTimeActivities"), DefaultValue(null)]
    [XmlArrayItem("LeisureTimeActivity")]
    public List<int> LeisureTimeActivities { get; set; }
    public string LeisureTimeActivityOthers { get; set; }
    ...
    
    public string Observation { get; set; }
}
 

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

1. Привет @Md. Асадуззаман, это работает для меня, не могли бы вы, пожалуйста, поделиться своим дизайном модели? И какова ваша версия asp.net ядро?

2. @Rena, я добавил свою модель и использую версию 3.1. Спасибо

Ответ №1:

Вот рабочая демонстрация, за которой вы могли бы следить:

 var mySerializer = new XmlSerializer(typeof(DetailAssessmentRequest));
//To read the file, create a xml string.
var xmlstring = System.IO.File.ReadAllText("XMLFile.xml");
//Parse to XDocument and remove the empty or null value
var document = XDocument.Parse(xmlstring);
document.Descendants()
        .Where(e => e.IsEmpty || String.IsNullOrWhiteSpace(e.Value))
        .Remove();
// Call the Deserialize method and cast to the object type.
var myObject = (DetailAssessmentRequest)mySerializer.Deserialize(document.CreateReader());
 

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

1. Спасибо за ваше сотрудничество. Но мне нужно более универсальное решение, которое может обрабатывать любой запрос POST на основе XML, независимо от модели. У меня есть много других моделей, с которыми следует обращаться в общем виде. Еще раз спасибо.