如何处理特殊字符,如&安培;#2;当序列化/反序列化XML对象? [英] How to handle special characters like  when Serialize/Deserialize xml object?

查看:400
本文介绍了如何处理特殊字符,如&安培;#2;当序列化/反序列化XML对象?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一些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 &#2;, &#3;. 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 &#2;<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 &#2; 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆