2015-01-21 46 views
3

當我試圖序列化一個包含斜槓/的字符串屬性的對象時,JSON生成的每個斜槓都會轉義兩次。帶雙轉義字符的序列化JSON


實施例:

隨機類:

public class Foo 
{ 
    [DataMember(Name = "bar"] 
    public string Bar { get; set; } 
} 

而且

Foo foo = new Foo() { Bar = " Foo/Bar" }; 
string json = RandomStaticClass.Serialize(foo); 

的JSON將是:

{ 
    \"bar\":\"Foo \\/ Bar\" 
} 

導致:

{ 
    "bar":"Foo \/ Bar" 
} 

雖然,我只是想:

{ 
    "bar":"Foo/Bar" 
} 

任何想法?謝謝:)


這裏是我的功能序列化對象:

public static string Serialize(object instance) 
    { 
     using (MemoryStream stream = new MemoryStream()) 
     { 
      DataContractJsonSerializer serializer = new DataContractJsonSerializer(instance.GetType()); 
      serializer.WriteObject(stream, instance); 
      stream.Position = 0; 
      using (StreamReader reader = new StreamReader(stream)) 
      { 
       return reader.ReadToEnd(); 
      } 
     } 
    } 
+0

序列化程序執行此操作,但沒有關閉它的選項。這是有效的JSON,所以它有一個被逃脫的問題? – 2015-01-21 10:53:55

+0

問題是斜線被轉了兩次。 – ShuuZ 2015-01-21 10:55:53

回答

1

你看到的JSON像這樣在Visual Studio?因爲我相信這樣可以,但實際值不會有轉義字符。 LE:經過測試,你是對的。

我認爲一個解決辦法可能只是有一個替換的呼叫後弦,像這樣:

 using (MemoryStream stream = new MemoryStream()) 
     { 
      DataContractJsonSerializer serializer = new DataContractJsonSerializer(instance.GetType()); 
      serializer.WriteObject(stream, instance); 
      stream.Position = 0; 
      using (StreamReader reader = new StreamReader(stream)) 
      { 
       return reader.ReadToEnd().Replace("\\", ""); 
      } 
     } 

如果有更好的選擇,我想知道它是如何被處理。

我希望這能回答你的問題。

LLE(僅當您計劃在客戶端使用JavaScript使用此):

我要補充的是,它會自動這樣做(正斜槓不被轉義)治療結束標記 - />(我引用 - 「HTML不允許標籤內的字符串包含</」),因爲在JavaScript中的客戶端'\/' === '/'。所以你不必擔心它。

+0

我編輯我的問題更精確。 – ShuuZ 2015-01-21 10:51:34

+0

我已經添加了我的答案。不過這是一個解決方法。 – 2015-01-21 11:04:43

+0

我必須添加這樣一個事實,即它自動完成(正斜槓不會被轉義)來處理結束標記 - 「/>」(我引用 - 「HTML不允許