XmlSerializer загружает "в файл как" e; во время десериализации - когда XML содержит иврит - PullRequest
1 голос
/ 08 мая 2020

Вот мой xml:

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

ItemName включает символ ". После десериализации этот символ заменяется на &quot;. Вот мой код:

var serializer = new XmlSerializer(typeof(ProductXmlWrapper));
using (var fileStream = new FileStream(file, FileMode.Open, FileAccess.Read))
  {

     var product = (ProductXmlWrapper)serializer.Deserialize(fileStream);

     if (product != null)
     {
       SaveDataToDb(product.BO.Product);
     }
  }

Итак, что мне изменить? От кодировки это зависит?

Ответы [ 2 ]

2 голосов
/ 08 мая 2020

Если я не ошибаюсь, хотя предварительный просмотр свойства ItemName продукта будет включать &quot; или \" в качестве специальных символов в строке, это не должно влиять на использование этого свойства.

Я тестировал следующее и напечатал на консоли именно содержимое файла 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; }
    }

My XML:

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

Конечно, мой P C не настроен для поддержки символов иврита (?), Но " выводится в соответствии с XML.

0 голосов
/ 08 мая 2020

Вы можете использовать XmlReader вместо потоков и использовать "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 version="1.0" encoding="utf-8" ?> вверху файла xml.

...