解决MySql布尔型新旧版本兼容问题,采用枚举来表示布尔型的数据表。由正向工程赋值
大石头 authored at 2018-05-15 21:21:05
7.61 KiB
X
# XML ÐòÁл¯ ## ¸ÅÊö NewLife.Core ÌṩÁËÁé»îµÄ XML ÐòÁл¯ºÍ·´ÐòÁл¯¹¦ÄÜ£¬Í¨¹ý `XmlHelper` À©Õ¹·½·¨¿ÉÒÔ·½±ãµØ½øÐжÔÏóÓë XML µÄת»»¡£Ö§³Ö×Ô¶¯Ìí¼Ó×¢ÊÍ¡¢ÊôÐÔģʽÊä³öµÈÌØÐÔ£¬ÌرðÊʺÏÅäÖÃÎļþ³¡¾°¡£ **ÃüÃû¿Õ¼ä**£º`NewLife.Xml`£¨À©Õ¹·½·¨£©¡¢`NewLife.Serialization`£¨ºËÐÄʵÏÖ£© **ÎĵµµØÖ·**£ºhttps://newlifex.com/core/xml ## ºËÐÄÌØÐÔ - **¼ò½à API**£º`ToXml()` ºÍ `ToXmlEntity<T>()` À©Õ¹·½·¨ - **×¢ÊÍÖ§³Ö**£º×Ô¶¯¸½¼Ó `Description` ºÍ `DisplayName` ÌØÐÔ×÷ΪעÊÍ - **ÊôÐÔģʽ**£º¿ÉÑ¡Ôñ½«ÊôÐÔÐòÁл¯Îª XML ÊôÐÔ¶ø·ÇÔªËØ - **±àÂë¿ØÖÆ**£ºÖ§³ÖÖ¸¶¨±àÂë¸ñʽ - **Îļþ²Ù×÷**£ºÖ±½ÓÐòÁл¯µ½Îļþ»ò´ÓÎļþ·´ÐòÁл¯ ## ¿ìËÙ¿ªÊ¼ ### ÐòÁл¯ ```csharp using NewLife.Xml; public class AppConfig { public String Name { get; set; } public Int32 Port { get; set; } public Boolean Debug { get; set; } } var config = new AppConfig { Name = "MyApp", Port = 8080, Debug = true }; // ÐòÁл¯Îª XML ×Ö·û´® var xml = config.ToXml(); ``` **Êä³ö**£º ```xml <?xml version="1.0" encoding="utf-8"?> <AppConfig> <Name>MyApp</Name> <Port>8080</Port> <Debug>true</Debug> </AppConfig> ``` ### ·´ÐòÁл¯ ```csharp using NewLife.Xml; var xml = """ <?xml version="1.0" encoding="utf-8"?> <AppConfig> <Name>MyApp</Name> <Port>8080</Port> <Debug>true</Debug> </AppConfig> """; var config = xml.ToXmlEntity<AppConfig>(); Console.WriteLine(config.Name); // MyApp ``` ## API ²Î¿¼ ### ToXml - ÐòÁл¯ ```csharp // »ù´¡ÐòÁл¯ public static String ToXml(this Object obj, Encoding? encoding = null, Boolean attachComment = false, Boolean useAttribute = false) // ÍêÕû²ÎÊý public static String ToXml(this Object obj, Encoding encoding, Boolean attachComment, Boolean useAttribute, Boolean omitXmlDeclaration) // ÐòÁл¯µ½Á÷ public static void ToXml(this Object obj, Stream stream, Encoding? encoding = null, Boolean attachComment = false, Boolean useAttribute = false) // ÐòÁл¯µ½Îļþ public static void ToXmlFile(this Object obj, String file, Encoding? encoding = null, Boolean attachComment = true) ``` **²ÎÊý˵Ã÷**£º - `encoding`£º±àÂë¸ñʽ£¬Ä¬ÈÏ UTF-8 - `attachComment`£ºÊÇ·ñ¸½¼Ó×¢ÊÍ£¨Ê¹Óà Description/DisplayName£© - `useAttribute`£ºÊÇ·ñʹÓà XML ÊôÐÔģʽ - `omitXmlDeclaration`£ºÊÇ·ñÊ¡ÂÔ XML ÉùÃ÷ ### ToXmlEntity - ·´ÐòÁл¯ ```csharp // ´Ó×Ö·û´®·´ÐòÁл¯ public static TEntity? ToXmlEntity<TEntity>(this String xml) where TEntity : class // ´ÓÁ÷·´ÐòÁл¯ public static TEntity? ToXmlEntity<TEntity>(this Stream stream, Encoding? encoding = null) // ´ÓÎļþ·´ÐòÁл¯ public static TEntity? ToXmlFileEntity<TEntity>(this String file, Encoding? encoding = null) ``` ## ʹÓó¡¾° ### 1. ÅäÖÃÎļþ ```csharp using System.ComponentModel; using NewLife.Xml; public class DatabaseConfig { [Description("Êý¾Ý¿â·þÎñÆ÷µØÖ·")] public String Server { get; set; } = "localhost"; [Description("Êý¾Ý¿â¶Ë¿Ú")] public Int32 Port { get; set; } = 3306; [Description("Êý¾Ý¿âÃû³Æ")] public String Database { get; set; } = "mydb"; [Description("Óû§Ãû")] public String User { get; set; } = "root"; [Description("Á¬½Ó³¬Ê±£¨Ã룩")] public Int32 Timeout { get; set; } = 30; } // ±£´æÅäÖ㨴ø×¢ÊÍ£© var config = new DatabaseConfig(); config.ToXmlFile("db.config", attachComment: true); // ¼ÓÔØÅäÖà var loaded = "db.config".ToXmlFileEntity<DatabaseConfig>(); ``` **Éú³ÉµÄ XML**£º ```xml <?xml version="1.0" encoding="utf-8"?> <DatabaseConfig> <!--Êý¾Ý¿â·þÎñÆ÷µØÖ·--> <Server>localhost</Server> <!--Êý¾Ý¿â¶Ë¿Ú--> <Port>3306</Port> <!--Êý¾Ý¿âÃû³Æ--> <Database>mydb</Database> <!--Óû§Ãû--> <User>root</User> <!--Á¬½Ó³¬Ê±£¨Ã룩--> <Timeout>30</Timeout> </DatabaseConfig> ``` ### 2. ÊôÐÔģʽÊä³ö ```csharp public class Item { public Int32 Id { get; set; } public String Name { get; set; } public Decimal Price { get; set; } } var item = new Item { Id = 1, Name = "ÉÌÆ·A", Price = 99.9M }; // ÔªËØÄ£Ê½£¨Ä¬ÈÏ£© var xml1 = item.ToXml(); // <Item><Id>1</Id><Name>ÉÌÆ·A</Name><Price>99.9</Price></Item> // ÊôÐÔģʽ var xml2 = item.ToXml(useAttribute: true); // <Item Id="1" Name="ÉÌÆ·A" Price="99.9" /> ``` ### 3. ¸´ÔÓ¶ÔÏó ```csharp public class Order { public Int32 Id { get; set; } public DateTime CreateTime { get; set; } public Customer Customer { get; set; } public List<OrderItem> Items { get; set; } } public class Customer { public String Name { get; set; } public String Phone { get; set; } } public class OrderItem { public String ProductName { get; set; } public Int32 Quantity { get; set; } public Decimal Price { get; set; } } var order = new Order { Id = 1001, CreateTime = DateTime.Now, Customer = new Customer { Name = "ÕÅÈý", Phone = "13800138000" }, Items = new List<OrderItem> { new() { ProductName = "ÉÌÆ·A", Quantity = 2, Price = 50 }, new() { ProductName = "ÉÌÆ·B", Quantity = 1, Price = 100 } } }; var xml = order.ToXml(); ``` ### 4. Ê¡ÂÔ XML ÉùÃ÷ ```csharp // Ê¡ÂÔ <?xml version="1.0" encoding="utf-8"?> var xml = obj.ToXml(Encoding.UTF8, false, false, true); ``` ### 5. ×ÖµäÐòÁл¯ ```csharp // ×Ö·û´®×Öµä¿ÉÒÔÖ±½ÓÐòÁл¯ var dict = new Dictionary<String, String> { ["Key1"] = "Value1", ["Key2"] = "Value2" }; dict.ToXmlFile("settings.xml"); ``` ## Xml Àࣨ¸ß¼¶Ó÷¨£© ¶ÔÓÚÐèÒª¸ü¾«Ï¸¿ØÖƵij¡¾°£¬¿ÉÒÔÖ±½ÓʹÓà `Xml` Àࣺ ```csharp using NewLife.Serialization; // ÐòÁл¯ var xml = new Xml { Stream = stream, Encoding = Encoding.UTF8, UseAttribute = false, UseComment = true, EnumString = true // ö¾ÙʹÓÃ×Ö·û´® }; xml.Write(obj); // ·´ÐòÁл¯ var xml = new Xml { Stream = stream, Encoding = Encoding.UTF8 }; var result = xml.Read(typeof(MyClass)); ``` ### Xml ÀàÊôÐÔ ```csharp public class Xml { /// <summary>ʹÓÃÌØÐÔÊä³ö</summary> public Boolean UseAttribute { get; set; } /// <summary>ʹÓÃ×¢ÊÍ</summary> public Boolean UseComment { get; set; } /// <summary>ö¾ÙʹÓÃ×Ö·û´®¡£Ä¬ÈÏtrue</summary> public Boolean EnumString { get; set; } /// <summary>XMLдÈëÉèÖÃ</summary> public XmlWriterSettings Setting { get; set; } } ``` ## ÌØÐÔÖ§³Ö ### XmlRoot - ¸ùÔªËØÃû³Æ ```csharp [XmlRoot("config")] public class AppConfig { public String Name { get; set; } } // Êä³ö <config><Name>...</Name></config> ``` ### XmlElement - ÔªËØÃû³Æ ```csharp public class User { [XmlElement("user_name")] public String Name { get; set; } } ``` ### XmlAttribute - Êä³öΪÊôÐÔ ```csharp public class Item { [XmlAttribute] public Int32 Id { get; set; } public String Name { get; set; } } // Êä³ö <Item Id="1"><Name>...</Name></Item> ``` ### XmlIgnore - ºöÂÔ×Ö¶Î ```csharp public class User { public String Name { get; set; } [XmlIgnore] public String Password { get; set; } // ²»ÐòÁл¯ } ``` ## ×î¼Ñʵ¼ù ### 1. ÅäÖÃÎļþʹÓÃ×¢ÊÍ ```csharp // ±£´æÊ±ÆôÓÃ×¢ÊÍ config.ToXmlFile("app.config", attachComment: true); // ʹÓà Description ÌØÐÔÌí¼Ó˵Ã÷ [Description("Ó¦ÓÃÃû³Æ£¬ÓÃÓÚÈÕÖ¾±êʶ")] public String AppName { get; set; } ``` ### 2. Îļþ²Ù×÷×¢ÒâÊÂÏî ```csharp // ToXmlFile »á×Ô¶¯´´½¨Ä¿Â¼ config.ToXmlFile("Config/app.xml"); // ¼ì²éÎļþÊÇ·ñ´æÔÚ if (File.Exists(file)) { var config = file.ToXmlFileEntity<AppConfig>(); } ``` ### 3. ±àÂëÒ»ÖÂÐÔ ```csharp // ±£´æºÍ¼ÓÔØÊ¹ÓÃÏàͬ±àÂë var encoding = Encoding.UTF8; config.ToXmlFile("config.xml", encoding); var loaded = "config.xml".ToXmlFileEntity<AppConfig>(encoding); ``` ## Óë JSON ¶Ô±È | ÌØÐÔ | XML | JSON | |------|-----|------| | ¿É¶ÁÐÔ | ´ø×¢Ê͸üÇåÎú | ¸ü½ô´Õ | | Ìå»ý | ½Ï´ó | ½ÏС | | ×¢ÊÍÖ§³Ö | Ô­ÉúÖ§³Ö | ²»Ö§³Ö | | ÅäÖÃÎļþ | ? ÍÆ¼ö | ? ÊÊÓà | | API Êý¾Ý | ? ²»ÍƼö | ? ÍÆ¼ö | ## Ïà¹ØÁ´½Ó - [JSON ÐòÁл¯](/NewLife/X/Blob/master/Doc/json-JSONÐòÁл¯.md) - [ÅäÖÃϵͳ Config](/NewLife/X/Blob/master/Doc/config-ÅäÖÃϵͳConfig.md) - [¶þ½øÖÆÐòÁл¯ Binary](/NewLife/X/Blob/master/Doc/binary-¶þ½øÖÆÐòÁл¯Binary.md)