如题,项目中有多少个或者须求对网址注册协议举行灵活布置的须要,大多配备都施用系列化形式保留到了xml
中.当使用xml连串化对诸如网址协商实行安排保存时,爆发了难题。
换行丢失了.纵然那是意料中的标题,却也让自身高烧了几天。

http://geekswithblogs.net/cmartin/archive/2005/11/30/61705.aspx 中关于
Serializing A String Within a CDATA
Element 
 的篇章中提供二个正确的解决办法。
今后自个儿对其开始展览了一部分修改优化,使用起来会有益于1些。

 

商贸公司 1商贸公司 2Code
商贸公司 3
商贸公司 4namespace tjb.Utility.Config
商贸公司 5商贸公司 6商贸公司 7{
商贸公司 8    using System;
商贸公司 9    using System.Text;
商贸公司 10    using System.Xml.Serialization;
商贸公司 11    using System.Xml.Schema;
商贸公司 12    using System.Xml;
商贸公司 13商贸公司 14    /**//// <summary>
商贸公司 15    /// 用于连串化CData节点。不可能包蕴<see cref=”]]>”></see>字符。
商贸公司 16    /// by tangjingbo @2008/11/24
商贸公司 17    /// </summary>
商贸公司 18    public class CDATA : IXmlSerializable
商贸公司 19商贸公司 20    商贸公司 21{
商贸公司 22        private string _value;
商贸公司 23商贸公司 24        /**//// <summary>
商贸公司 25        /// 默许构造函数
商贸公司 26        /// </summary>
商贸公司 27商贸公司 28        public CDATA() 商贸公司 29{ }
商贸公司 30商贸公司 31        /**//// <summary>
商贸公司 32        /// 带参数构造函数
商贸公司 33        /// </summary>
商贸公司 34        /// <param name=”value”></param>
商贸公司 35        public CDATA(string value)
商贸公司 36商贸公司 37        商贸公司 38{
商贸公司 39            this._value = value;
商贸公司 40        }
商贸公司 41商贸公司 42        /**//// <summary>
商贸公司 43        /// 
商贸公司 44        /// </summary>
商贸公司 45        public string Value
商贸公司 46商贸公司 47        商贸公司 48{
商贸公司 49商贸公司 50            get 商贸公司 51{ return _value; }
商贸公司 52        }
商贸公司 53
商贸公司 54        XmlSchema IXmlSerializable.GetSchema()
商贸公司 55商贸公司 56        商贸公司 57{
商贸公司 58            return null;
商贸公司 59        }
商贸公司 60
商贸公司 61        void IXmlSerializable.ReadXml(XmlReader reader)
商贸公司 62商贸公司 63        商贸公司 64{
商贸公司 65商贸公司 66            /**//***** 即使此节点中隐含有多少个节点须动用此措施。**/
商贸公司 67            this._value = reader.ReadElementContentAsString();
商贸公司 68商贸公司 69            /**//* **********/
商贸公司 70            //this.text = reader.ReadString();
商贸公司 71            // reader.Read();
商贸公司 72        }
商贸公司 73
商贸公司 74        void IXmlSerializable.WriteXml(XmlWriter writer)
商贸公司 75商贸公司 76        商贸公司 77{
商贸公司 78            writer.WriteCData(this._value);
商贸公司 79        }
商贸公司 80商贸公司 81        /**//// <summary>
商贸公司 82        /// 重写 获取CData节点的 内容
商贸公司 83        /// </summary>
商贸公司 84        /// <returns></returns>
商贸公司 85        public override string ToString()
商贸公司 86商贸公司 87        商贸公司 88{
商贸公司 89            return this._value;
商贸公司 90        }
商贸公司 91商贸公司 92        /**//// <summary>
商贸公司 93        /// 将 CDATA 对象隐式转变来 内容 字符串。
商贸公司 94        /// </summary>
商贸公司 95        /// <param name=”element”></param>
商贸公司 96        /// <returns></returns>
商贸公司 97        public static implicit operator string(CDATA element)
商贸公司 98商贸公司 99        商贸公司 100{
商贸公司 101            return (element == null) ? null : element._value;
商贸公司 102        }
商贸公司 103商贸公司 104        /**//// <summary>
商贸公司 105        /// 将 内容 对象隐式转变到 CDATA 字符串。
商贸公司 106        /// </summary>
商贸公司 107        /// <param name=”text”></param>
商贸公司 108        /// <returns></returns>
商贸公司 109        public static implicit operator CDATA(string text)
商贸公司 110商贸公司 111        商贸公司 112{
商贸公司 113            return new CDATA(text);
商贸公司 114        }
商贸公司 115
商贸公司 116    }
商贸公司 117}
商贸公司 118

 

动用如下方式开创种类化类库(配置类)

 

商贸公司 119商贸公司 120商贸公司,Code
商贸公司 121    public class CDataTest : IConfig<CDataTest>
商贸公司 122商贸公司 123    商贸公司 124{
商贸公司 125        [XmlElement(“Agreement”, Type = typeof(CDATA))]
商贸公司 126        public CDATA Agreement
商贸公司 127商贸公司 128        商贸公司 129{
商贸公司 130            get;
商贸公司 131            set;
商贸公司 132        }
商贸公司 133
商贸公司 134商贸公司 135        public int SomeConfigFiled 商贸公司 136{ get; private set; }
商贸公司 137
商贸公司 138商贸公司 139        接口#region 接口
商贸公司 140        protected override CDataTest Current
商贸公司 141商贸公司 142        商贸公司 143{
商贸公司 144商贸公司 145            get 商贸公司 146{ return this; }
商贸公司 147        }
商贸公司 148        #endregion
商贸公司 149    }

 

测试代码

 

商贸公司 150商贸公司 151Code
商贸公司 152 CDataTest c = CDataTest.Instance;           
商贸公司 153            Console.WriteLine(c.Agreement);
商贸公司 154            c.Agreement = @”
商贸公司 155    本服务协议内容囊括协议正文及全数xxx网已经发布的或未来或许公布的各样规则。全体条条框框为斟酌不可分割的一有个别,与磋商正文具备一样法律坚守。 
商贸公司 156  在本服务协议中绝非以“规则”字样表示的链接文字所提醒的文书不属于本服务协议的组成都部队分,而是此外内容的协议或有关参考数据,与本协议未有法规上的直白关乎。 
商贸公司 157  用户在使用xxx网提供的种种服务的还要,承诺接受并坚守各类相关规则的规定。xxx网有权根据要求平时地制定、修改本协议或各种规则,如本协议有别的改动,xxx网将要网址上登出布告,公告予用户。如用户不允许相关改变,必须结束使用“服务”。经修订的商议假如在xxx网发表后,登时自动生效。各个规则会在昭示后生效,亦成为本协议的一片段。登入或持续应用“服务”将意味着用户接受经修订的商业事务。除另行显明宣称外,任何使“服务”范围扩张或效益加强的新剧情均受本协议约束。 
商贸公司 158  用户确认本服务协议后,本服务协议即在用户和xxx网之间时有发生法律效劳。请用户必须在登记从前认真读书全体服务协议内容,如有任何疑窦,可向xxx网咨询。 一)无论用户实际是不是在注册在此之前认真读书了本服务协议,只要用户点击协议正本下方的“确认”开关并根据xxx网注册程序成功注册为用户,用户的行为仍旧表示其同意并签名了本服务协议。 二)本协议不涉及用户与xxx网此外用户之间因网上交易而发生的法兰西网球国际赛(French Open)关系及法律纠纷。 
商贸公司 159
商贸公司 160
商贸公司 161
商贸公司 162二、 定义
商贸公司 163
商贸公司 164xxx网上交易平台:有关xxx网上交易平台上的术语或图示的意义,详见xxx网支持。 
商贸公司 165  用户及用户注册:用户必须是负有完全体公民事行为本领的自然人,只怕是具备合法经营资格的实体组织。无民事行为工老婆、限制民事行为技艺人以及无经纪或一定经营资格的集团不力注册为xxx网用户或超越其民事义务或行为本事范围从事贸易的,其与xxx网之间的服务协议自始无效,xxx网一经发现,有权立时收回该用户,并追究其使用xxx网“服务”的整个法律权利。用户注册是指用户登录xxx网,并按要求填写有关音讯并承认同意施行相关用户协商的经过。用户因进行交易、获取有偿服务或接触xxx网服务器而产生的享有应纳税款,以及任何硬件、软件、服务及任何方面包车型大巴开销均由用户承担支付。xxx网址仅看成交易地点。xxx网仅看成用户物色交易对象,就货品和劳务的贸易举行商议,以及得到种种与交易有关的服务的地址。xxx网无法操纵交易所涉及的物料的品质、安全或合法性,商业贸易消息的实事求是或准确性,以及交易方实施其在交易协议项下的各种职分的力量。xxx网并不作为买家或是商行的身价参加买卖行为的本人。xxx网提示用户应该经过协调的严俊推断鲜明登录货色及有关信息的忠实、合法性和卓有功能。 
商贸公司 166
商贸公司 167
商贸公司 168
商贸公司 169三、 用户职责和免费:
商贸公司 170
商贸公司 171用户有职分具备和谐在xxx网的用户名及交易密码,并有职务使用本人的用户名及 密码随时登入xxx网交易平台。用户不得以此外情势私下转让或授权旁人采纳自个儿的xxx网用户名; 
商贸公司 172
商贸公司 173“;
商贸公司 174            Console.WriteLine(c.Save());
商贸公司 175            if (c.Exception != null)
商贸公司 176                Console.WriteLine(c.Exception.ToString());
商贸公司 177            Console.ReadLine();

 

生成的xml文档:

 

商贸公司 178商贸公司 179Code
<?xml version=”1.0″?>
<CDataTest xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance” xmlns:xsd=”http://www.w3.org/2001/XMLSchema"&gt;
  <Agreement><![CDATA[
    本服务协议内容包罗协议正文及全部xxx网已经公布的或现在也许仙告的每一类规则。全数条条框框为协商不可分割的1有的,与商谈正文具有一样法律坚守。 
  在本服务协议中尚无以“规则”字样表示的链接文字所提醒的文书不属于本服务协议的组成部分,而是别的内容的商议或有关参考数据,与本协议没有法规上的直白涉及。 
  用户在行使xxx网提供的每一样服务的同时,承诺接受并根据每一种相关规则的显明。xxx网有权依据需求常常地制订、修改本协议或各样规则,如本协议有别的改变,xxx网就要网址上刊登布告,文告予用户。如用户不允许相关退换,必须甘休使用“服务”。经修订的商议假设在xxx网发布后,立时自行生效。种种规则会在文告后生效,亦成为本协议的一有个别。登入或三番五次选择“服务”将意味着用户接受经修订的商业事务。除另行明确宣称外,任何使“服务”范围扩充或效益增强的新内容均受本协议约束。 
  用户确认本服务协议后,本服务协议即在用户和xxx网之间发生法律效力。请用户必须在登记以前认真阅读全体服务协议内容,如有任何疑窦,可向xxx网咨询。 1)无论用户实际是或不是在登记此前认真读书了本服务协议,只要用户点击协议正本下方的“确认”开关并依照xxx网注册程序成功注册为用户,用户的表现仍旧表示其允许并签署了本服务协议。 二)本协议不关乎用户与xxx网其余用户之间因网上交易而产生的法规关系及法律纠纷。 

二、 定义

xxx网上交易平台:有关xxx网上交易平台上的术语或图示的意义,详见xxx网帮忙。 
  用户及用户注册:用户必须是兼备完全体公民事行为本领的自然人,可能是兼备合法经营资格的实业组织。无民事行为技艺人、限制民事行为本领人以及无经纪或特定经营资格的团队不力注册为xxx网用户或超越其民事职务或行为工夫范围从事贸易的,其与xxx网之间的服务协议自始无效,xxx网一经发现,有权马上裁撤该用户,并追究其使用xxx网“服务”的全部法律权利。用户注册是指用户登录xxx网,并按供给填写相关音讯并明确同意实践有关用户协议的历程。用户因实行贸易、获取有偿服务或接触xxx网服务器而发生的保有应纳税款,以及一切硬件、软件、服务及其余方面包车型大巴资费均由用户承担开发。xxx网站仅作为交易地方。xxx网仅看成用户物色交易对象,就物品和劳动的交易进行磋商,以及取得种种与贸易有关的劳动的地方。xxx网不可能调节交易所涉及的货品的成色、安全或合法性,商业贸易音信的真实性或准确性,以及交易方试行其在贸易协议项下的种种职务的力量。xxx网并不作为买家或是商家的身价加入买卖行为的本人。xxx网提示用户应该经过祥和的当心判别明确登入货色及有关音讯的实在、合法性和有效性。 

三、 用户职分和无需付费:

用户有职分具备和谐在xxx网的用户名及交易密码,并有职务使用自身的用户名及 密码随时登入xxx网交易平台。用户不得以此外情势专擅转让或授权别人选取本人的xxx网用户名; 

]]></Agreement>
</CDataTest>

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图