我有一个XML文档,看起来像
<?xml version="1.0" encoding="utf-8"?>
<DataProviderConfiguration xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<FileVersion>1</FileVersion>
<SupportedEventTypes>
<InvestigateEventType>TimeBasedRefresh</InvestigateEventType>
<InvestigateEventType>IdBasedRefresh</InvestigateEventType>
<InvestigateEventType>FileReceived</InvestigateEventType>
</SupportedEventTypes>
它被解析为一些DTO:
[XmlArray(nameof(SupportedEventTypes))]
[XmlArrayItem("InvestigateEventType")]
public virtual string[] SupportedEventTypes { get; set; }
给定上面的文档,支持的事件类型
将有3个项目。
现在上面的片段包含属性
<SupportedEventTypes>
<InvestigateEventType>TimeBasedRefresh</InvestigateEventType>
<InvestigateEventType IsDefault="true">IdBasedRefresh</InvestigateEventType>
<InvestigateEventType IsDefault="true">FileReceived</InvestigateEventType>
</SupportedEventTypes>
让我们考虑更新的DTO
public class InvestigateEventType
{
public string Name { get; set; }
public bool IsDefault { get; set; }
}
[XmlArray(nameof(SupportedEventTypes))]
[XmlArrayItem("InvestigateEventType")]
public virtual InvestigateEventType[] SupportedEventTypes { get; set; }
给定调查事件类型
,XMLSerializer
应将其内容读入Name
属性,并将IsDefault
属性读入IsDefault
属性。
如何让它发生?
如何使IsDefault
属性不区分大小写?
我还没有尝试过这个代码,因为构建它需要大量的更改,我需要提前寻求帮助。
有时,这些(反)序列化程序需要在正确的方向上稍微推动一下,以便将正确的数据放入对象中。虽然JSON的结构松散,但XML文件的结构往往更为严格。不一定是通过设计,而是通过使用。
嵌入式对象还可以包含XML序列化程序的说明。因此,在嵌入对象的属性之前添加属性,例如[XmlAtoun(IsDefault)]
(告诉XML序列化器查找XML元素的属性IsDefault(如果存在))和[XmlText]
(告诉XML序列化器抓取其中的文本XML元素)将使XMLSerializer的工作更轻松。
这不仅让您和XMLSerializer都清楚它在寻找什么,还可以提高搜索性能,因为这可以防止XMLSerializer盲目地开始查询您的属性可能驻留的所有可能位置。