2017-08-23 76 views
1

我有,看起來像這是一個非常簡單的API方法:API返回瀏覽器的代碼有效的JSON,但無效JSON

public string Get(int id) 
{ 
    Doors door = (Doors)Repository<Doors>.Get(id); 
    string d = JsonConvert.SerializeObject(door); 
    return d; 
} 

有了這個在WebAPIConfig:

config.Formatters.JsonFormatter.SupportedMediaTypes 
    .Add(new MediaTypeHeaderValue("text/html")); 

當我在d上設置了一個斷點,我得到這個:

{"DoorSys":100000,"DoorName":"Door 1 - Out","DoorID":"Door # 01 (Out)","LocationSys":-1,"StatusSys":100001,"OrganizationSys":805408} 

這一切都很好。但是,它在瀏覽器中顯示的時候,它看起來像這樣:

"{\"DoorSys\":100000,\"DoorName\":\"Door 1 - Out\",\"DoorID\":\"Door # 01 (Out)\",\"LocationSys\":-1,\"StatusSys\":100001,\"OrganizationSys\":805408}" 

如果我把什麼返回瀏覽器成JSON格式,它當然不喜歡它。完全一樣。

什麼(如果有的話?)我做錯了嗎?

編輯:

基於由L.B答案,我這樣做,而不是:

public Doors Get(int id) 
{ 
    Doors door = (Doors)Repository<Doors>.Get(id); 
    return door; 
} 

這一工程!

+2

請注意,您的響應標題不應該爲JSON而不是「text/html」嗎? – scunliffe

+4

您是否嘗試將您的Get方法聲明爲'public Doors Get(int id)'?你正在雙重序列化* door *對象 –

+0

@scunliffe - 也許?我在另一個線程上找到了「text/html」的答案,問題是「如何返回JSON而不是XML」。 –

回答

4

您正在雙重序列化對象。聲明你的獲取方法爲

public Doors Get(int id) 
+0

我不會說他是雙序列化它,它只是序列化一次,然後返回序列化爲一個字符串。 – Dispersia

+2

@Dispersia然後底層框架再次序列化該字符串。這是*轉義*字符串的原因 –