Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# XmlSerializer加载“;存档为&;引用反序列化期间-当XML包含希伯来语时_C#_Xml_Encoding_Deserialization_Xmlserializer - Fatal编程技术网

C# XmlSerializer加载“;存档为&;引用反序列化期间-当XML包含希伯来语时

C# XmlSerializer加载“;存档为&;引用反序列化期间-当XML包含希伯来语时,c#,xml,encoding,deserialization,xmlserializer,C#,Xml,Encoding,Deserialization,Xmlserializer,以下是我的xml: <Product> <ItemCode>123456</ItemCode> <ItemName>תמצית מרווה משולשת SP 1:2 - מ"ל 100</ItemName> <FrgnName>Salvia fruitcosa</FrgnName> </Product> 那么我应该改变什么呢?它是否取决于编码?如果我没有弄错的话,虽然产品的ItemName属性预

以下是我的xml:

<Product>
<ItemCode>123456</ItemCode>
<ItemName>תמצית מרווה משולשת  SP 1:2 - מ"ל 100</ItemName>
<FrgnName>Salvia fruitcosa</FrgnName>
</Product>

那么我应该改变什么呢?它是否取决于编码?

如果我没有弄错的话,虽然产品的
ItemName
属性预览将包含
\”
作为字符串中的特殊字符,但这不应影响该属性的使用

我使用以下内容进行了测试,并将XML文件的内容准确地打印到控制台:

    class Program
    {
        static void Main(string[] args)
        {
            Console.OutputEncoding = Encoding.UTF8;

            string file = @"Input.xml";
            var serializer = new XmlSerializer(typeof(ProductXmlWrapper));
            using (var fileStream = new FileStream(file, FileMode.Open, FileAccess.Read))
            {
                var product = (ProductXmlWrapper)serializer.Deserialize(fileStream);
                Console.WriteLine(product.ItemName);
            }
        }
    }

    [XmlRoot(ElementName = "Product")]
    public class ProductXmlWrapper
    {    
        public string ItemCode { get; set; }
        public string ItemName { get; set; }
        public string FrgnName { get; set; }
    }
我的XML:

<?xml version="1.0" encoding="utf-8" ?>
<Product>
  <ItemCode>123456</ItemCode>
  <ItemName>תמצית מרווה משולשת  SP 1:2 - מ"ל 100</ItemName>
  <FrgnName>Salvia fruitcosa</FrgnName>
</Product>

123456
תמתמרשמששתSP 1:2-מ“㪚100”
鼠尾草

当然,我的电脑不支持希伯来语(?)字符,但是
是按照XML输出的。

您可以使用XmlReader,而不是使用streams,并使用“utf-8”进行编码:

string file = @"Input.xml";     
using (var xmlreader = XmlReader.Create(file))
                {
                    var product = (ProductXmlWrapper)serializer.Deserialize(xmlreader,"utf-8");
                    Console.WriteLine(product.ItemName);
                }

同时在xml文件顶部添加

@user2864740此问题仅在希伯来语中出现text@MichaelKostiuchenko在xml头文件中使用什么编码?您的示例反序列化为
\“
,而不是
。双引号是xml中的特殊字符,Net library会自动替换该字符。参见Wiki:实际上,只有在属性值中(并且只有在
"
用作分隔符;但许多序列化程序有点懒惰,对属性和文本节点应用相同的规则,并且输出完全正确,任何正确编写的XML应用程序都应该可以接受。这需要对序列化程序进行完全不同的声明,因为它不支持编码参数。See:[链接]()
string file = @"Input.xml";     
using (var xmlreader = XmlReader.Create(file))
                {
                    var product = (ProductXmlWrapper)serializer.Deserialize(xmlreader,"utf-8");
                    Console.WriteLine(product.ItemName);
                }