XML Serialize boolean为0和1
XML Schema Part 2指定定义为boolean的数据类型的实例可以具有以下合法文字{true,false,1,0}。 例如,在反序列化时,以下XML将布尔属性“Emulate”设置为true
。
1
但是,当我将对象序列化回XML时,我得到的是true
而不是数值。 我的问题是,有没有办法可以控制XML中的布尔表示?
您可以实现IXmlSerializable,它允许您根据需要更改类的序列化输出。 这将需要创建3个方法GetSchema(),ReadXml(XmlReader r)和WriteXml(XmlWriter r)。 实现接口时,将调用这些方法而不是.NET尝试序列化对象本身。
可以在以下位置找到示例:
http://www.developerfusion.co.uk/show/4639/和
http://msdn.microsoft.com/en-us/library/system.xml.serialization.ixmlserializable.aspx
你也可以使用一些XmlSerializer属性black magic来做到这一点:
[XmlIgnore] public bool MyValue { get; set; } /// Get a value purely for serialization purposes [XmlElement("MyValue")] public string MyValueSerialize { get { return this.MyValue ? "1" : "0"; } set { this.MyValue = XmlConvert.ToBoolean(value); } }
如果你被冒犯了,你还可以使用其他属性来隐藏智能感知中的这个成员! 它不是一个完美的解决方案,但它可以比实现IXmlSerializable更快。
不,不使用默认的System.Xml.XmlSerializer:您需要将数据类型更改为int以实现该目标,或者提供您自己的序列化代码(可能但不是很有趣)。
但是,您可以简单地对生成的XML进行后处理,当然,使用XSLT或仅使用字符串替换。 在开发时间和运行时间方面都有点破解,但速度很快……
- 找出给定长度的所有可能单词的好方法是什么
- 如何将Container.DataItem作为参数传递?
- Request.Files始终为null
- 如何从服务结构actor获取状态而无需等待其他方法完成?
- 该进程无法访问该文件,因为该文件正由另一个进程使用
- 当HttpRequest.Content.IsMimeMultipartContent()返回true时返回false
- 如何使用System.DirectoryServices.AccountManagement将用户添加到AD?
- 使用AdHocWorkspace会导致“不支持语言’C#’。”
- 如何在C#中导入PKCS#8 RSA privateKey(由OpenSSL创建)