Как читать двоичные данные ¬ () в XML с использованием C # генерируется Windows - PullRequest
0 голосов
/ 09 марта 2012

как читать двоичные данные ¬ (& # x2;) в xml, используя c #, сгенерированный windows. Я пытаюсь получить доступ к списку ключей реестра в Windows Reg. В строковом значении появляются двоичные данные. Я могу сериализовать его, используя сериализацию xml (& # x2), но я не могу десериализовать его обратно? Может кто-нибудь объяснить мне, что происходит и почему? Помоги мне исправить это. Большое спасибо :))) Ошибка при чтении:

System.InvalidOperationException не обработано
Сообщение = «В документе XML есть ошибка (235, 28)». Чтение из файла:

public diagnostics readregkey(diagnostics diagnostics, string filename)
{
    diagnostics dia = null;
    using (System.IO.StreamReader sr = 
        new System.IO.StreamReader(filename, Encoding.Unicode))
    {
        System.Xml.Serialization.XmlSerializer x = 
            new System.Xml.Serialization.XmlSerializer(typeof(diagnostics));
        dia = x.Deserialize(sr) as diagnostics;
    }
    return dia;
}

Запись в файл:

public static void  WriteRegKey(diagnostics diagnostics, string filename)
{
    diagnostic.regKeys.Add(key(Registry.LocalMachine, sKeyGravitas));
    diagnostic.regKeys.Add(key(Registry.CurrentUser, sKeyGravitas));
    using (System.IO.StreamWriter sw = 
        new System.IO.StreamWriter(filename,false, Encoding.Unicode))
    {
        System.Xml.Serialization.XmlSerializer x = 
            new System.Xml.Serialization.XmlSerializer(typeof(diagnostics));
        x.Serialize(sw, diagnostics);
    }
}

Ответы [ 2 ]

2 голосов
/ 09 марта 2012

XML-файлы не могут представлять каждый символ, даже используя запись &#x;.

См. http://www.w3.org/TR/REC-xml/#charsets

XML 1.1, который широко не используется, может поддерживать все символы, кроме NUL.

Но для 0x0002 выражение его как  в XML просто не правильный формат.

Обычный способ обработки встроенных двоичных данных - преобразование их в base-64.

1 голос
/ 30 апреля 2015

У меня также была эта проблема, и, чтобы помочь следующей, я оставляю здесь то, что использовал для ее решения.

Как сказал Лавинио, XML не может представлять каждый символ.Поэтому, используя предоставленную им таблицу, я написал метод, очень похожий на другой ответ на другой вопрос: https://stackoverflow.com/a/641632/2315604,, который я вызываю перед тем, как сериализовать.Вы можете использовать XmlConvert.IsXmlChar https://msdn.microsoft.com/en-us/library/system.xml.xmlconvert.isxmlchar%28v=vs.110%29.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...