2017-04-06 53 views
4

我已經完成了我的第一個ASP.NET Core Web API,我想嘗試通過JSON手動序列化/反序列化JSON。 NET庫。在JSON.NET文檔他們給下面簡單的手動序列化的例子:不明白如何在ASP.NET Core WebAPI上使用JSON.NET

public static string ToJson(this Person p) 
{ 
    StringWriter sw = new StringWriter(); 
    JsonTextWriter writer = new JsonTextWriter(sw); 

    writer.WriteStartObject(); 

    // "name" : "Jerry" 
    writer.WritePropertyName("name"); 
    writer.WriteValue(p.Name); 

    // "likes": ["Comedy", "Superman"] 
    writer.WritePropertyName("likes"); 
    writer.WriteStartArray(); 
    foreach (string like in p.Likes) 
    { 
     writer.WriteValue(like); 
    } 
    writer.WriteEndArray(); 

    writer.WriteEndObject(); 

    return sw.ToString(); 

}

缺乏的初學者什麼是像我這樣的是如何使用這個字符串。例如,考慮以下因素:

[HttpGet("/api/data") 
[Produces("application/json")] 
public IActionResult GetData() 
{ 
    return Ok(new Byte[SomeBigInt]); 
} 

在上面的代碼我真的不知道在哪裏ASP.NET核心序列化數組JSON ...我假設它的引擎蓋下的某處發生。如果我要手動序列化(使用JSON.NET示例)一些大的Byte數組,我該如何處理結果字符串?它只是「返回好(myJsonString);」?不會內置序列化程序 - 不知道它已經是序列化操作的結果 - 再次序列化它?

+0

您可以在您返回序列化內容的位置創建自己的'IActionResult'派生結果 – Nkosi

回答

1

由於Asp.Net Core非常靈活,有幾種方法可以返回JSON。如果你想從一個控制器的最直接的方式做一個返回JSON是這樣的:

[HttpGet("/api/data")] 
public JsonResult GetData() { 

    return Json(new { 
     fieldOneString = "some value", 
     fieldTwoInt= 2 
    }); 

} 

引擎蓋下的ControllerJson()輔助方法是使用JSON.NET做的JSON序列化然後將其作爲響應主體發送。

你可以做同樣的事情是這樣的:

string jsonText = JsonConvert.SerializeObject(new { 
     fieldOneString = "some value", 
     fieldTwoInt= 2 
    }); 

Response.WriteAsync(jsonText); 

注:使用Response.WriteAsync(jsonText)你需要添加using Microsoft.AspNetCore.Http到您的文件,並有一個項目引用Microsoft.AspNetCore.Http.Abstractions

+0

謝謝。我想我很困惑的是:我怎麼知道我可以做什麼,不能從我的控制器返回。如果我返回一個JsonResult對象,我怎麼知道客戶端會理解那是什麼?爲什麼你沒有將返回類型設置爲「IActionResult」,然後「返回Ok(anObjectOfTypeJsonResult)」?我對整個事情感到非常困惑(因爲我確定這很明顯)。 – LKeene

+0

JsonResult實現IActionResult,Jaon控制器輔助方法返回JsonResult。你可以改變我發佈的操作方法來返回一個IActionResult,它會工作得很好。在這種情況下,我更喜歡讓action方法返回JsonResult,儘管這是方法將要返回的那種IActionResult。這有幫助嗎? –

+0

對不起羅恩,我還是很困惑。假設我希望傳輸一個原始的字節數組。沒有序列化到JSON,BSON或其他......只是一個字節數組。我可以這樣做嗎?: – LKeene