Как сериализовать данные типа string без использования StringWriter в качестве входных данных - PullRequest
0 голосов
/ 24 мая 2010

Я хочу сериализовать входные данные типа string, но не хочу использовать StringWriter и StringReader for для сериализации / десериализации.Причина этого в том, что когда символы экранирования отправляются как часть входной строки для сериализации, она сериализуется, но некоторые символы Spl вставляются в xml (например: ""). Я получаю ошибку XMl при десериализации этого сериализованногоданные.

void M1()
{
 string str = 23 + "AC"+(char)1;
 StringWriter sw = new StringWriter();
 XmlSerializer serializer = new XmlSerializer(typeof(String));
 serializer.Serialize(sw, str);
 System.Console.WriteLine("String encoded to XML = \n{0} \n", sw.ToString());
 StringReader sr = new StringReader(sw.ToString());
 String s2 = (String)serializer.Deserialize(sr);
 System.Console.WriteLine("String decoded from XML = \n {0}", s2);
}

Ответы [ 2 ]

2 голосов
/ 24 мая 2010

Например, вы можете кодировать строку как UTF-8, а затем кодировать данные, используя base-64:

string encoded = Convert.ToBase64String(Encoding.UTF8.GetBytes(theString));

Это дает вам строку без каких-либо специальных символов.

Десериализацияобратное:

string theString = Encoding.UTF8.GetString(Convert.FromBase64String(encoded));
1 голос
/ 26 мая 2010

Как насчет использования XmlWriter для записи и XmlTextReader для чтения?Пример:

var sb = new StringBuilder();

// set the encoding here: you may need to try different encoding types...
var settings = new XmlWriterSettings{ Encoding = System.Text.Encoding.UTF8 };

using (var writer = XmlWriter.Create(sb, settings))
{
    string str = 23 + "AC"+(char)1;
    XmlSerializer serializer = new XmlSerializer(typeof(String));
    serializer.Serialize(writer, str);
    System.Console.WriteLine("String encoded to XML = \n{0} \n", sw.ToString());

    // more code to handle read the values with XmlTextReader, etc etc etc......    
}
...