小型个人网站制作,做单不能用什么网站,php网站怎么样,沈阳市城乡建设局问题
有的项目使用webservice返回结果是xml#xff0c;需要进行xml序列化和反序列化
xml序列化相关特性
C#中#xff0c;XML序列化相关的特性主要包括#xff1a;
XmlIgnore#xff1a;这个特性可以用来指示序列化过程忽略一个属性或一个字段。当使用XmlIgnore特性时需要进行xml序列化和反序列化
xml序列化相关特性
C#中XML序列化相关的特性主要包括
XmlIgnore这个特性可以用来指示序列化过程忽略一个属性或一个字段。当使用XmlIgnore特性时被标记的属性或字段将不会被序列化到XML。XmlAttribute这个特性可以用来指示序列化过程将一个属性或字段作为一个XML属性而不是元素。XmlElement这个特性可以用来指定序列化过程将一个属性或字段作为一个XML元素。XmlText这个特性可以用来指定序列化过程将一个属性或字段的值作为XML文本节点。XmlType这个特性可以用来指定序列化过程为类或结构体生成一个特定的XML类型名称。XmlRoot这个特性可以用来指定序列化过程的根元素名称和可选的命名空间。XmlAccessType这个特性可以用来指定属性或字段的访问类型以控制它们在序列化过程中是否可读或可写。这些特性可以在类、属性或字段上使用以控制C#对象如何被序列化为XML。
案例代码
XmlHelper.cs
using System.Text;
using System.Xml;
using System.Xml.Serialization;namespace XmlStu02
{/// summary/// xml帮助类/// /summarypublic class XmlHelper{/// summary/// 对象转化为xml字符串如果有参数为null则不进行序列化/// /summary/// param nameobj/param/// param nameisFormat是否进行格式化/param/// param nameisNeedHeader是否需要xml请求头/param/// returns/returnspublic static string ObjectToXmlString(object obj, bool isNeedHeader false, bool isFormat false){try{XmlSerializer xmlSerializer new XmlSerializer(obj.GetType());XmlWriterSettings settings new XmlWriterSettings();settings.Encoding new UTF8Encoding(false);//utf-8不带BOM //Encoding.UTF8;utf-8带BOMif (isFormat){settings.Indent true;settings.IndentChars ;settings.NewLineChars \r\n;}if (!isNeedHeader){settings.OmitXmlDeclaration true; // 不生成声明头}using (var memoryStream new MemoryStream())using (XmlWriter xmlWriter XmlWriter.Create(memoryStream, settings)){// 强制指定命名空间覆盖默认的命名空间XmlSerializerNamespaces namespaces new XmlSerializerNamespaces();namespaces.Add(string.Empty, string.Empty);xmlSerializer.Serialize(xmlWriter, obj, namespaces);var xmlString Encoding.UTF8.GetString(memoryStream.ToArray());return xmlString;};}catch{return string.Empty;}}/// summary/// 将XML数据反序列化为对象/// /summary/// typeparam nameT/typeparam/// param namexmlData/param/// returns/returnspublic static T? XmlStringToObjectT(string xmlData) where T : class{// 创建XmlSerializer实例 XmlSerializer serializer new XmlSerializer(typeof(T));// 使用XmlReader读取XML并反序列化为Person对象 using (StringReader reader new StringReader(xmlData)){XmlReader xmlReader XmlReader.Create(reader);T? result serializer.Deserialize(xmlReader) as T;return result;}}}
}FriendModel
using System.Xml.Serialization;namespace XmlStu02
{/// summary/// 好朋友/// /summary[XmlRoot(FRIEND)]public class FriendModel{/// summary/// 姓名/// /summary[XmlAttribute(NAME)]public string? Name { get; set; }/// summary/// 性别/// /summary[XmlAttribute(SEX)]public string? Sex { get; set; }}
}
ChildModel
using System.Xml.Serialization;namespace XmlStu02
{/// summary/// 孩子模型/// /summary[XmlRoot(CHILD)]public class ChildModel{/// summary/// 姓名/// /summary[XmlElement(NAME)]public string? Name { get; set; }/// summary/// 出生日期/// /summary[XmlElement(BIRTHDAY)]public string? BirthDay { get; set; }/// summary/// 好朋友有多个/// /summary[XmlElement(FRIEND)]public ListFriendModel? Friends { get; set; }}
}
ParentModel
using System.Xml.Serialization;namespace XmlStu02
{/// summary/// 父类模型/// /summary[XmlRoot(PARENT)]public class ParentModel{/// summary/// 姓名/// /summary[XmlElement(NAME)]public string? Name { get; set; }/// summary/// 出生日期/// /summary[XmlElement(BIRTHDAY)]public string? BirthDay { get; set; }/// summary/// 孩子有多个/// /summary[XmlElement(CHILDREN)]public ListChildModel? Children { get; set; }}
}
测试
using System.Text.Json;namespace XmlStu02
{internal class Program{/// summary/// 程序入口方法/// /summary/// param nameargs/paramstatic void Main(string[] args){var friend new FriendModel();friend.Name 小明;friend.Sex 男;Console.ForegroundColor ConsoleColor.Green;Console.WriteLine(XmlHelper.ObjectToXmlString(friend, true, true));var child new ChildModel();child.Name 大孩子;child.BirthDay null;child.Friends new ListFriendModel() {friend,new FriendModel(){Name小红,Sex女}};Console.ForegroundColor ConsoleColor.Red;Console.WriteLine(XmlHelper.ObjectToXmlString(child, true, true));var parnent new ParentModel();parnent.Name 父亲;parnent.BirthDay 1970-10-01;parnent.Children new ListChildModel(){child,new ChildModel(){Name小孩子,BirthDay1995-02-18}};Console.ForegroundColor ConsoleColor.Blue;var parentXml XmlHelper.ObjectToXmlString(parnent, true, true);Console.WriteLine(parentXml);var xmlParent XmlHelper.XmlStringToObjectParentModel(parentXml);if (xmlParent ! null){Console.ForegroundColor ConsoleColor.Yellow;Console.WriteLine(xml反序列化成功);Console.ForegroundColor ConsoleColor.Magenta;var jsonConfig new JsonSerializerOptions{WriteIndented true, // 可选仅用于格式化输出 Encoder System.Text.Encodings.Web.JavaScriptEncoder.UnsafeRelaxedJsonEscaping};Console.WriteLine(System.Text.Json.JsonSerializer.Serialize(xmlParent, jsonConfig));}Console.ForegroundColor ConsoleColor.White;}}
}