c#中对XML反序列化
2021-03-12 05:27
标签:忽略 time 数据格式 版本 str 反序 space 公共属性 xsd 可以手动生成。 根据不同的windows版本,该工具可能在: 通过 生成schema文件 然后通过 生成c文件。根据根节点名称会生成对应的class文件代表对应的对象类。 如果反序列化时,需要使用不同的属性名来存储,比如xml中使用中文,而json想改为使用英文字段,可以通过 如根节点: 此时,会将根节点 对于子节点: 可以将 对于特定类别的数据格式(如时间日期),想对节点数据格式化解析,可以增加私有属性,并且修改公共属性的 如对于XML中 假设生成的序列化类为 c#中对XML反序列化 标签:忽略 time 数据格式 版本 str 反序 space 公共属性 xsd 原文地址:https://www.cnblogs.com/mosakashaka/p/12608867.html生成对象类
也可以使用windows系统自带的xsd.exe
工具。C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\bin\NETFX 4.7.2 Tools
C:\Program Files (x86)\Microsoft SDKs\Windows\v8.1A\bin\NETFX 4.7.2 Tools
C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.7.2 Tools
xsd sample.xml
sample.xsd
xsd sample.xsd /c
名称修改
XmlElement
和XmlRootAttribute
元素对类进行装饰。[System.Xml.Serialization.XmlRootAttribute(Namespace = "", ElementName = "检测信息", IsNullable = false)]
public partial class SampleClass {}
检测信息
,读入SampleClass节点[XmlElement(ElementName = "公司名称")]
public string CompanyName
{
get;
set;
}
公司名称
节点读入CompanyName
节点。数据格式化
set
方式,解析格式化后再存入私有属性。yyyy年MM月dd日HH时mm分ss秒
格式的日期,想输出为yyyy-MM-dd HH:mm:ss
格式: public static string TestDateFormatIn = "yyyy年MM月dd日HH时mm分ss秒";
public static string TestDateFormatOut = "yyyy-MM-dd HH:mm:ss";
//公共属性,反序列化时使用该属性
public string DATE
{
get
{
return this.TestDateFormatted;
}
set
{
System.DateTime parsedDate;
if (System.DateTime.TryParseExact(value, ArteryXmlDataHelper.TestDateFormatIn, null,
System.Globalization.DateTimeStyles.None, out parsedDate))
{
this.TestDateFormatted = parsedDate.ToString(ArteryXmlDataHelper.TestDateFormatOut);
}
else
{
this.TestDateFormatted = value;
}
}
}
//私有属性,添加[XmlIgnore]使xml反序列化时忽略该属性
[XmlIgnore]
public string TestDateFormatted { get; set; }
反序列化
SampleClass
,则反序列化代码为:XmlSerializer serializer = new XmlSerializer(typeof(ArteryXmlData));
SampleClass xmlData = null;
using (var stream = new FileStream(sample.xml, FileMode.Open))
{
xmlData = (SampleClass)serializer.Deserialize(stream);
}