c# - C#,忽略 XML 反序列化的大小写敏感
问题描述
1.xml文件包含xml元素:“INSTITUTION”和“institution”,每个xml元素都包含名称、代码和INN等属性。
如果 xml 元素名称为:“INSTITUTION”,我的代码可以正常工作,并且在到达 xml 元素名称:“institution”时会失败。
我从stackoverflow中找到了一些解决方案,但对我没有帮助......
如何忽略 xml 反序列化的大小写敏感?
<institutions>
<INSTITUTION name= "some_value" CODE="some_value" INN="some_value"/>
<INSTITUTION name= "some_value" CODE="some_value" INN="some_value"/>
<INSTITUTION name= "some_value" CODE="some_value" INN="some_value"/>
<institution name= "some_value" code="some_value" inn="some_value"/>
<institution name= "some_value" code="some_value" inn="some_value"/>
<institution name= "some_value" code="some_value" inn="some_value"/>
<institution name= "some_value" code="some_value" inn="some_value"/>
</institutions>
</treasury>
C#代码:
using System;
using System.Collections.Generic;
using System.IO;
using System.Text;
using System.Xml;
using System.Xml.Serialization;
using Test_for_finding_file_type.XmlSynonymDeserializer;
//This is the class that will be deserialized
[XmlRoot("treasury")]
public class Treasury
{
[XmlElement("institutions")]
public institutions Institutions { get; set; }
}
public class institutions
{
[XmlElement("INSTITUTION")]
public List<Institution> InstitutionList { get; set; }
}
public class Institution
{
[XmlAttribute("name")]
public string Name;
[XmlAttribute("CODE")]
public string Code;
[XmlAttribute("INN")]
public string Inn;
}
public class Program
{
public static void Main(String[] args)
{
Program pro = new Program();
pro.DeserializeObject("test.xml");
}
private void DeserializeObject(string filename)
{
Console.WriteLine("Reading with XML Reader");
XmlSerializer serializer = new XmlSerializer(typeof(Treasury));
FileStream fs = new FileStream(filename, FileMode.Open);
XmlReader reader = XmlReader.Create(fs);
Treasury treasuryAccounts;
treasuryAccounts = (Treasury)serializer.Deserialize(reader);
fs.Close();
Console.WriteLine("\n------------------------------------------Institutions---------------------------------------------------------\n");
foreach (var institition in treasuryAccounts.Institutions.InstitutionList)
{
Console.Write("Treasury Account Name:" + institition.Name
+ "\tCODE:" + institition.Code
+ "\tINN:" + institition.Inn
+ "\n\n"
);
}
Console.ReadKey();
}
}
解决方案
整个问题是缺少 XmlRoot 属性。请参阅下面的代码:
using System;
using System.Collections.Generic;
using System.IO;
using System.Text;
using System.Xml;
using System.Xml.Serialization;
[XmlRoot("treasury")]
public class Treasury
{
[XmlElement("institutions")]
public Institutions institutions { get; set; }
}
[XmlRoot("institutions")]
public class Institutions
{
[XmlElement("INSTITUTION")]
public List<Institution> InstitutionList { get; set; }
}
public class Institution
{
[XmlAttribute("name")]
public string Name;
[XmlAttribute("CODE")]
public string Code;
[XmlAttribute("INN")]
public string Inn;
}
public class Program
{
const string FILENAME = @"c:\temp\test.xml";
public static void Main(String[] args)
{
Program pro = new Program();
pro.DeserializeObject(FILENAME);
}
private void DeserializeObject(string filename)
{
Console.WriteLine("Reading with XML Reader");
XmlSerializer serializer = new XmlSerializer(typeof(Institutions));
XmlReader reader = XmlReader.Create(FILENAME);
Treasury treasuryAccounts = new Treasury();
treasuryAccounts.institutions = (Institutions)serializer.Deserialize(reader);
reader.Close();
Console.WriteLine("\n------------------------------------------Institutions---------------------------------------------------------\n");
foreach (var institition in treasuryAccounts.institutions.InstitutionList)
{
Console.Write("Treasury Account Name:" + institition.Name
+ "\tCODE:" + institition.Code
+ "\tINN:" + institition.Inn
+ "\n\n"
);
}
Console.ReadKey();
}
}
推荐阅读
- powershell - 孩子的等待过程,有超时
- flutter - 如何在颤振中使用时区库将不同的国家时间(时区)设置为模拟时钟?
- css - 如何覆盖用户代理样式表(Chrome)以将溢出设置为对我的 svg 可见?
- websocket - GraphQL 订阅与 socket.io
- ios - 我怎样才能调配 UIView.init
- flutter - 颤振动画不渲染
- java - cvc-complex-type.2.4.c:匹配通配符是严格的,但找不到元素'context:component-scan'的声明
- swiftui - 使用 NavigationLink 返回上一个屏幕,而不会丢失输入的数据
- azure - Spring Boot 应用程序从 FTP 服务器读取数据并存储在 Azure Blob 存储中
- bi-publisher - 怎么可能从“
如何从“for-each”获取结果到行/行并添加符号逗号(在 bi 发布者的 rtf 模板上)。例如我的要求:
<?for-each: BillingAccounts?> <?if: EffectiveDate EffectiveDate!= ‘’?> <?EffectiveDate?>, <?end if?> &l