У меня есть пользовательский тип, который я хочу сериализовать, этот пользовательский тип принимает ввод, который может состоять из escape-символов - PullRequest
1 голос
/ 25 мая 2010

У меня есть пользовательский тип, который я хочу сериализовать, этот пользовательский тип принимает ввод, который может состоять из escape-символов.

M1_Serilizer(MyCustomType customTypeObj)
{
    XmlSerializer serializer = new XmlSerializer(typeof(MyCustomType));
    StringWriter sw = new StringWriter(CultureInfo.InvariantCulture);
    serializer.Serialize(sw, customTypeObj);
    string str= sw.ToString();
    M2_Deserializer(str);
}

M2_Deserializer(string str)
{
    XmlSerializer serializer = new XmlSerializer(typeof(MyCustomType));
    StringReader sr = new StringReader(str);
    MyCustomType customTypeObj = (MyCustomType)serializer.Deserialize(sr);
}

----------Exception details----------

Когда клиент настраивает входной объект как PRINTLINE00

СОСТОЯНИЕ ОТКЛОНЕНИЯ 217 , я получаю исключение, когда десериализуются те же данные:

Исключение составляют: - Сообщение: в документе XML есть ошибка (6, 22).

 String:
 <?xml version="1.0" encoding="utf-16"?>

 <InputEntry xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:xsd="http://www.w3.org/2001/XMLSchema">
     <Fields>
         <Field>
             <FieldName>PRINTLINE00</FieldName>
             <FieldValue>&#x1B;DENIAL STATE 217</FieldValue>
        </Field>
     </Fields>
 </InputEntry>

 --------------------

Когда символы экранирующего типа являются частью CustomTypeObj, при десериализации возникает исключение.

Вопрос 1) Как мне это преодолеть?,

Вопрос 2) Я должен использовать StringReader и StringWriter, а не поток памяти или другие способы. StringWriter / reader будет обслуживать только мои внутренние функции.

Вопрос 3) Как можно обрабатывать эти escape-символы?

...