独自の json エンコーダーを作成した後、二重引用符が 1 つではなく 2 つのエスケープ バックスラッシュに置き換えられていることに気付きました。
C# にはJson.Encode()
メソッドが組み込まれていることがわかりました。はい、それを機能させましたが、次のコード (私が作成した json エンコーダー) が引用符を置き換えなかった理由に困惑しています。予想。
これが私のjsonエンコーダーメソッドです:
public static string jsonEncode(string val)
{
val = val.Replace("\r\n", " ")
.Replace("\r", " ")
.Replace("\n", " ")
.Replace("\"", "\\\"")
.Replace("\\", "\\\\");
return val;
}
これは、2 つのバックスラッシュ (上記の C# によく似たエスケープ文字としての 1 つ) を json ファイル内の単一の「実際の」バックスラッシュと見なすため、もちろん無効な json を生成Replace("\"", "\\\"")
し"
ます。\\"
意図したとおり、二重引用符。ただし、Replace("\\", "\\\\")
呼び出しは完全に機能します (つまり、予想どおり、1 つのバックスラッシュが 2 つに置き換えられます)。
私の引数に基づいて、期待どおりに Replace メソッドが機能を実行していないことは簡単にわかります。私の質問はなぜですか?Replace("\"", "\\"")
バックスラッシュは C# のエスケープ文字でもあるため、使用できないことがわかっているため、構文エラーが発生します。Replace("\"", "\"")
二重引用符を二重引用符に置き換えるので、使用することもばかげています。
C# の replace メソッドをよりよく理解するために、Replace メソッドが予想とは異なる動作をする理由を知りたいです。Json.Encode
このレベルのコーディングをどのように達成しますか?