2017-03-08 55 views
1

如果我有一個簡單的類:Newtonsoft系列化VS ASP.NET系列化

public class UserId 
{ 
    public string Id { get; set; } 
} 

,我把它傳遞給HttpRequest.CreateResponse()的輸出是:

{ "id": "1234bcf6678" } 

不過,如果我使用一個JsonSerializer我得到:

"{ \"id\": \"1234bcf6678\" }" 

據我所知,第二個實際上是一個JSON字符串,但我怎麼能使用日e JsonSerializer AND將結果從它傳遞給HttpRequest.CreateResponse(),以獲得第一個輸出(即,沒有逃脫的引號)?

我知道有上SO相關的問題,但我想用Newtonsoft序列化,因爲它使我能夠正確處理序列一些通用的列表和派生的對象。

對於額外的背景下它可能是值得了解的,我做這裏面Azure的功能。我看到Web API有System.Web.Http.GlobalConfiguration可用但功能不確定。

+0

ASP.Net使用Json.net內部,你可以在應用程序的啓動配置。你能更具體地說明你的情況嗎,ASP.Net沒有返回正確的輸出結果? –

+0

我剛剛做了一個編輯。這是在Azure函數內部,所以我不確定我是否通過GlobalConfiguration具有與在Web API中相同的覆蓋可能性。 – user1200984

回答

1

當您使用JsonSerializer並返回結果字符串時,它將被序列化爲Json 再次。您必須繞過HttpRequest.CreateResponse()擴展方法,並手動創建響應 - 這樣,您可以自己設置內容和內容類型。一個有用的出發點是看看source code for CreateResponse(大約在332行)。您可以使用StringContent,而不是使用ObjectContent<T>,媒體類型爲「application/json」。

+0

謝謝Andrew,這聽起來很合理。這是我一天的結束,所以我會稍後再嘗試,如果我得到了我所需要的東西,請將其標記爲已回答。 – user1200984

+0

不放鬆就不放手。解決方案是: var response = new HttpResponse(HttpStatusCode.OK); response.Content = new StringContent(的輸出); 返回響應; 感謝您的指針。 – user1200984

+0

只是一個人,你可能想明確地設置媒體類型爲'application/json' - 我非常確定StringContent deafults爲'application/text'。這將有助於,例如,當您使用jQuery使用輸出時,它將自動解析json並返回一個對象,而不是一個字符串。 –