Сериализация строки с обратной косой чертой

Моя программа должна обработать входную строку. Но когда в \ Method1 отправляется "\ mesg", Блок else выполняется вместо блока if.

 void Method()
 {
     string str = "\\Mesg";
     str = Method1(str);
     Console.WriteLine(str);
 }

 string Method1(string s)
 {
     string upadtedString = s;
     if (s.Contains(@"\\"))
     {
         //do nothing
     }
     else if(s.Contains(@"\"))
     {
         upadtedString.Replace(@"\",@"\\");
         s = upadtedString;
     }
     return s;
 }

Лучший пример - когда «\ 0Mesg» является входом для Method1 () . Это вызывает исключение сериализации XML, когда я пытаюсь десериализовать. Просто чтобы справиться с этим, я хочу добавить еще одну косую черту, "\ 0Mesg", перед сериализацией строки.

Как я могу заставить ее работать как положено?

1
задан Peter Mortensen 31 August 2010 в 22:05
поделиться

2 ответа

Ваш код в основном правильный, вы упускаете что-то важное для его работы ...

void Method() 
{  
    string str = "\\Mesg"; 
    str = Method1(str);  
    Console.WriteLine(str); 
}

string Method1(string s)
{
    string upadtedString = s;
    if (s.Contains(@"\\")
    {
     //do nothing
    }
    else if(s.Contains(@"\"))
    {
          s = upadtedString.Replace(@"\",@"\\");//Change around here
    }
    return s;
} 

Вам нужно захватить то, что заменяется. upadtedString.Replace () НЕ изменяет саму строку, он возвращает измененную строку.

0
ответ дан 2 September 2019 в 22:16
поделиться

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

Console.WriteLine(@"\\");  // Double slash
Console.WriteLine("\\");   // Single slash
Console.WriteLine("\\\\"); // Double slash
Console.WriteLine(@"\");   //"// Single slash

str не выдаст то, что вы ожидаете вернуть, поскольку \ - это escape-символ.

string str = "\\Mesg";
Console.WriteLine(str); // Returns: "\Mesg"

Попробуйте вместо этого

string myString = "\\Mesg";
Console.WriteLine(myString); // Returns: \Mesg
Console.WriteLine(EscapeSlashes(myString)); //Returns; \\Mesg

public static string EscapeSlashes(string str)
{
    return str.Replace("\\", "\\\\");
}
2
ответ дан 2 September 2019 в 22:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: