我有一個與Conference API project類似的項目(幾乎完全相同),它正在採用類似的方法來處理返回的CollectionJson內容。我很難設置ReadDocument(第30行)的Collection屬性,因爲它沒有任何setter。我可以通過以下操作改變在Web Api項目中閱讀JSON內容
public CollectionJsonContent(Collection collection)
{
var serializerSettings = new JsonSerializerSettings
{
NullValueHandling = NullValueHandling.Ignore,
Formatting = Newtonsoft.Json.Formatting.Indented,
ContractResolver = new CamelCasePropertyNamesContractResolver()
};
collection.Version = "1.0";
Headers.ContentType = new MediaTypeHeaderValue("application/vnd.collection+json");
using (var writer = new JsonTextWriter(new StreamWriter(_memoryStream)){CloseOutput = false})
{
//var readDocument = new ReadDocument(); {IReadDocument.Collection = collection};
var serializer = JsonSerializer.Create(serializerSettings);
serializer.Serialize(writer,collection);
writer.Flush();
}
_memoryStream.Position = 0;
}
雖然上面的代碼編譯並在一定程度上梳理了問題,但後來我又會有不能夠消耗JsonCollection內容在我的控制器單元的另一問題,迴避這個問題試驗。請看下面的單元測試代碼片段:
using (var request = CreateRequest())
{
var controller = new TestController(DataService) {Request = request};
var temp = await controller.ListAsync(gridSearchData, sampleSearchData);
if ((temp is NotFoundResult) && (sampleCollection.Any()))
{
Assert.Fail("Controller did not return any result but query did");
}
var json = await temp.ExecuteAsync(cancellationTokenSource);
var readDocument = json.Content.ReadAsAsync<ReadDocument>(new[] {new CollectionJsonFormatter()}, cancellationTokenSource).Result;
}
因爲我沒有設置ReadDocument readDocument的集合屬性始終是空的,我無法閱讀其內容。 你如何在WEB API項目中異步讀取客戶端的JsonCollection內容?
要在Conference Web Api 和authors blog
確實很棒的工作和很好的更新。現在,我可以設置ReadDocument集合屬性。但有一個問題:爲什麼我會得到:「沒有MediaTypeFormatter可用於從內容讀取類型爲'ReadDocument'的對象當我運行json.Content.ReadAsAsync(new [] {new CollectionJsonFormatter()},cancellationTokenSource)時,媒體類型爲「application/vnd.collection + json」如上面的單元測試所述?你在測試你的控制器的時候在你的unittests中設置MediaTypeFormetter的位置? –
MHOOS
2014-09-10 16:32:15
@MHOOS我回復了你的電子郵件,詢問你是否可以寄給我一些示例代碼。單元測試的要點也可以工作。 – 2014-09-12 18:54:49