【问题标题】:Remove empty xml tag from ASP Net Web API POST Request从 ASP Net Web API POST 请求中删除空的 xml 标记
【发布时间】:2021-11-10 06:11:06
【问题描述】:

我想从 ASP.NET Core WEB API 中基于 XML 的 POST 请求中删除空 XML 标记。空 XML 标记困扰我使用 XmlSerializerFormatters反序列化 XML 到模型。

<?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>

我已经在我的Startup.cs

中添加了 XmlSerializerFormattersXmlDataContractSerializerFormatters
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; }
}

【问题讨论】:

  • 嗨@Md。 Asaduzzaman,它对我有用,你能分享你的模型设计吗?你的 asp.net core 版本是什么?
  • @Rena,我已经添加了我的模型并且正在使用 3.1 版。谢谢

标签: c# asp.net-core asp.net-core-webapi xmlserializer inputformatter


【解决方案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());

【讨论】:

  • 感谢您的合作。但我需要一个更通用的解决方案,它可以处理任何基于 XML 的 POST 请求,而与模型无关。我有很多其他模型应该以通用方式处理。再次感谢。
猜你喜欢
  • 1970-01-01
  • 2017-11-07
  • 1970-01-01
  • 1970-01-01
  • 2018-02-07
  • 2011-10-18
  • 2017-07-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多