首页 > 其他分享 >XML格式

XML格式

时间:2024-06-05 14:44:55浏览次数:13  
标签:XML string street new 格式 序列化 public

1、XML Attribute

[Serializable] 将该类标记为可以序列化类

XmlElement 节点重命名

XmlRoot 根节点重名称

XmlArray List集合添加根节点

XmlArrayItem List集合中子节点重命名

[XmlAttribute(“attr”)]   此属性会作为特性在 元素中

[XmlIgnore] 此特性是忽略此属性

 

这里用简单的城市,区域和街区作为例子,具体示范一下上面的规则:

[XmlRoot("MyCity", Namespace = "abc.abc", IsNullable = false)]//当该类为Xml根节点时,以此为根节点名称。
    public class City
    {
        [XmlAttribute("CityName")] 
        public string Name
        {
            get;
            set;
        }

        [XmlAttribute("CityId")] 
        public string Id
        {
            get;
            set;
        }
        // 表现为Xml层次结构,根为Areas,其所属的每个该集合节点元素名为类名。<Areas><Area ... /><Area ... /></Areas>
        [XmlArrayAttribute("Areas")]  
        public Area[] Areas
        {
            get;
            set;
        }
        
        [XmlIgnoreAttribute]//忽略该元素的序列化。
    }

    [XmlRoot("MyArea")]
    public class Area
    {
        [XmlAttribute("AreaName")]//表现为Xml节点属性。<... AreaName="..."/>
        public string Name
        {
            get;
            set;
        }

        [XmlElement("AreaId", IsNullable = false)]// 表现为Xml节点并重命名。<AreaId>...</AreaId>
        public string Id
        {
            get;
            set;
        }

        [XmlElement("Street", IsNullable = false)]
        public string[] Streets
        {
            get;
            set;
        }
    }

根据以上类型,我们mock一些数据:

    static void Main(string[] args)
    {
        Area area1 = new Area();
        area1.Name = "Pudong";
        area1.Id = "PD001";
        area1.Streets = new string [] { "street 001", "street 002" };
        Area area2 = new Area();
        area2.Name = "Xuhui";
        area2.Id = "XH002";
        area2.Streets = new string [] { "street 003", "street 004" };

        City city1 = new City();
        city1.Name = "Shanghai";
        city1.Id = "SH001";
        city1.Areas = new Area[] { area1, area2 };

        XmlSerializer.SaveToXml(@"C:\temp\XML\output003.xml", city1);
    }

最终输出的XML为:

<?xml version="1.0" encoding="utf-8"?>
<MyCity xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:xsd="http://www.w3.org/2001/XMLSchema"
        CityName="Shanghai" CityId="SH001" xmlns="abc.abc">
  <Areas>
    <Area AreaName="Pudong">
      <AreaId>PD001</AreaId>
      <Street>street 001</Street>
      <Street>street 002</Street>
    </Area>
    <Area AreaName="Xuhui">
      <AreaId>XH002</AreaId>
      <Street>street 003</Street>
      <Street>street 004</Street>
    </Area>
  </Areas>
</MyCity>

 

2、XML 序列化与反序列化

public class XMLExtensions
    {
        /// <summary>
        /// 对象序列化为XML字符串
        /// </summary>
        /// <typeparam name="T">对象类型</typeparam>
        /// <param name="t">Model实体对象</param>
        /// <returns></returns>
        public static string Serialize<T>(T t)
        {
            using (StringWriter sw = new StringWriter())
            {
                XmlSerializer xmlSerializer = new XmlSerializer(typeof(T));
                xmlSerializer.Serialize(sw, t);
                return sw.ToString();
            }
        }
    
        /// <summary>
        /// 将一个对象序列化为XML字符串。这个方法将不生成XML文档声明头。
        /// </summary>
        /// <param name="o">要序列化的对象</param>
        /// <returns>序列化产生的XML字符串</returns>
        public static string XmlSerializerObject(object o)
        {
            Encoding encoding = Encoding.UTF8;
            XmlSerializer serializer = new XmlSerializer(o.GetType());
            using (MemoryStream stream = new MemoryStream())
            {
                XmlWriterSettings settings = new XmlWriterSettings();
                settings.Indent = true;
                settings.NewLineChars = "\r\n";
                settings.Encoding = encoding;
                settings.OmitXmlDeclaration = true;
                settings.IndentChars = "    ";

                XmlSerializerNamespaces ns = new XmlSerializerNamespaces();
                ns.Add("", "");

                using (XmlWriter writer = XmlWriter.Create(stream, settings))
                {
                    serializer.Serialize(writer, o, ns);
                    writer.Close();
                }
                //return Encoding.UTF8.GetString(stream.ToArray());

                stream.Position = 0;
                using (StreamReader reader = new StreamReader(stream, encoding))
                {
                    return reader.ReadToEnd();
                }
            }
        }

        /// <summary>
        /// XML反序列化为对象
        /// </summary>
        /// <typeparam name="T">对象类型</typeparam>
        /// <param name="xml">xml字符串</param>
        /// <returns></returns>
        public static T Deserialize<T>(string xml)
        {
            XmlSerializer xmlSerializer = new XmlSerializer(typeof(T));
            using StringReader stringReader = new StringReader(xml);
            return (T)xmlSerializer.Deserialize(stringReader);
        }
    }

 

标签:XML,string,street,new,格式,序列化,public
From: https://www.cnblogs.com/xixi-in-summer/p/18233010

相关文章

  • 数美滑块的格式化检测点
    数美滑块的格式化检测点:e.prototype.getEncryptContent=function(e,t){        vara=this._data.__key,i=t||a;        p.default.isJsFormat()&&(i=O);        vars="string"===typeofe,r=s?e:p......
  • 小米商城格式化、反混淆检测点
    小米商城格式化检测点:vara=function(){  varx=!0;  returnfunction(a,t){   vare=x?function(){    if(t){     varx=t.apply(a,arguments);     t=null;     returnx;   }  }:......
  • android kotlin 小数保留格式化位数
    importjava.math.RoundingModeimportjava.text.NumberFormatimportjava.util.*/**支持设置舍入模式的类型小数*/inlinefunAny?.formatDecimalRoundingMode(decimalDigits:Int=2,roundingMode:RoundingMode=RoundingMode.HALF_UP,failValue:Double=0.0):......
  • printf() 格式字符串的使用方法
    printf()是C语言中一个非常重要的函数,它的核心功能是打印格式化的字符串。而其中的关键则是第一个参数——格式字符串(formatstring)。虽然大多数人都会使用格式字符串,但一些细节可能未必了解。本文将详细说明格式字符串的使用方法。格式字符串(formatstring)格式字符串是......
  • ASP.NET Web应用程序升级最新的MSBuild格式后,Visual Studio 2022中如何调试?
    摘要把ASP.NET的Web应用程序,Project文件从<ProjectToolsVersion="12.0"DefaultTargets="Build"xmlns="http://schemas.microsoft.com/developer/msbuild/2003">改为<ProjectSdk="Microsoft.NET.Sdk.Web">之后,升级成了最新的格式之后,如......
  • ASP.NET Web应用程序升级最新的MSBuild格式后,Visual Studio 2022中如何调试?
    摘要把ASP.NET的Web应用程序,Project文件从<ProjectToolsVersion="12.0"DefaultTargets="Build"xmlns="http://schemas.microsoft.com/developer/msbuild/2003">改为<ProjectSdk="Microsoft.NET.Sdk.Web">之后,升级成了最新的格式之后,如......
  • JSON 数据格式化方法
    文章目录数据介绍IDE或脚本格式化在线工具网址总结数据介绍JSON(JavaScriptObjectNotation)是一种轻量级的数据交换格式,它基于JavaScript编程语言的一个子集。尽管它起源于JavaScript,但JSON已经成为了一个完全独立于语言的文本格式,被广泛采用和应用于多种编程......
  • Java读写xml文件
    前言使用dom4j库java读xml文件示例代码:SAXReadersaxReader=newSAXReader();Documentdoc=null;try{ FileInputStreamfin=newFileInputStream("D://doc_f/student.xml"); document=saxReader.read(fin); Elementroot=document.getRootElement();//获取......
  • 将某xlsx文件转为UTF-8编码格式
    问题:        在使用jupyter对数据进行处理时,导入的文件可能不是UTF-8编码格式,这时就要将文件转为UTF-8。处理:    (1)将文件使用excel打开。    (2)点击左上角文件    (3)选择其他格式,将文件类型选为csvUTF-8格式。    (4)再次将文......
  • IDEA maven 项目 如何获取项目离线运行所需的全部依赖( .m2格式)
    背景:maven项目要将整个项目的依赖移植到某无法联网服务器进行测试,需要项目离线运行所需的全部依赖步骤:1. 首先需要有项目源码,解压后,使用IDEA Open Project 2. 在Settings中,配置settings.xml文件的完整路径,以及依赖文件夹的完整路径 setting.xml如果没有,可以复用下面的......