如何处理特殊字符,如&安培;#2;当序列化/反序列化XML对象? [英] How to handle special characters like  when Serialize/Deserialize xml object?
问题描述
我有一些BIZ对象来存储用户姓名,有时名称中包含一些特殊的字符,如&安培;#2;
,&安培;# 3;
。这些名字是从第三方进口的,我不能删除从源头上有趣的字符。
该应用程序将序列化/反序列化由XmlSerializer的客户对象,但奇怪的这里,当我序列名称以特殊字符,没有错误,结果会是这样<名称>吉姆放大器;#2;<名称>
。但是,当我反序列化输出XML,我会得到一个异常有XML文档(3,15)
。
$ B $出错b
所以,如何处理我的应用程序,这些特殊字符? !谢谢
附加了一些测试代码:
公共类客户
{
公共字符串名称;
}
类节目
{
公共静态牛逼DeserializeFromXml< T>(字符串设置),其中T:类
{
无功序列化=新的XmlSerializer(typeof运算(T));
变种读卡器=新StringReader(设置);
VAR的结果= serializer.Deserialize(读卡器);
返回结果为T;
}
公共静态字符串SerializeToXml< T>(T设置)
{
无功序列化=新的XmlSerializer(typeof运算(T));
变种作家=新的StringWriter();
serializer.Serialize(作家,设置);
返回writer.ToString();
}
静态无效的主要(字串[] args)
{
无功海峡=新的char [] {'J','我','M' (炭)2};
VAR的客户=新客户{名称=新的字符串(STR)};
无功输出= SerializeToXml(客户);
VAR OBJ = DeserializeFromXml<客户>(输出);
}
}
我请不要对你的问题的解决方案,但这里是后台信息
字符串&放大器;#2; XML是用于说与2值的字符。根据XML 1.0这不是一个有效的字符。请参见 http://www.w3.org/TR/2004 / REC-XML的20040204 /#NT-字符。
在.NET CLR是一致的。在XML串行器会很乐意与生成的非法字符的XML文档。然而,解串器将抛出遇到非法字符时。
请参阅的 http://msdn.microsoft.com/en-us/library/aa302290.aspx 了解更多详情。
XML 1.1放宽了限制。但净只支持XML 1.0。
I have some biz objects to store the customer names, sometimes the name contains some special characters like 
, 
. These names are imported from 3rd party, and I cannot delete the funny chars from the source.
The application will serialize/deserialize the customer object by XmlSerializer, but the strange thing here is when I serialize the name with special chars, there are no errors, and the result will be like this <Name>Jim <Name>
. But when I deserialize the output xml, I will get an exception There is an error in XML document (3, 15)
.
So how to handle these special characters in my application? Thanks!
Attached some test code:
public class Customer
{
public string Name;
}
class Program
{
public static T DeserializeFromXml<T>(string settings) where T : class
{
var serializer = new XmlSerializer(typeof(T));
var reader = new StringReader(settings);
var result = serializer.Deserialize(reader);
return result as T;
}
public static string SerializeToXml<T>(T settings)
{
var serializer = new XmlSerializer(typeof(T));
var writer = new StringWriter();
serializer.Serialize(writer, settings);
return writer.ToString();
}
static void Main(string[] args)
{
var str = new char[] { 'J', 'i', 'm', (char)2 };
var customer = new Customer { Name = new string(str) };
var output = SerializeToXml(customer);
var obj = DeserializeFromXml<Customer>(output);
}
}
I don't have a solution for your question, but here is the background info.
The string  is XML for saying the character with value of '2'. According to XML 1.0 this is not a valid character. See http://www.w3.org/TR/2004/REC-xml-20040204/#NT-Char.
The .Net CLR is consistent. The Xml serialiser will happily generated XML documents with illegal character. However the deserialiser will throw when an illegal character is encountered.
See http://msdn.microsoft.com/en-us/library/aa302290.aspx for more details.
XML 1.1 relaxes the restriction. But .Net only support XML 1.0.
这篇关于如何处理特殊字符,如&安培;#2;当序列化/反序列化XML对象?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!