VS2017 で ASP.NET Core 2.0 を使用しています。
で返された JSON を逆シリアル化しようとしていHttpResponseMessage
ますが、「型のオブジェクトをキャストできません...」という例外が発生します。
失敗しているコードは次のとおりです。
FilesUploadedListResponse fileUploadListResponse = new FilesUploadedListResponse();
string jsonResult = response.Content.ReadAsStringAsync().Result;
fileUploadListResponse = (FilesUploadedListResponse)JsonConvert.DeserializeObject(jsonResult);
最後の行は、例外が発生する場所です...
"Unable to cast object of type 'Newtonsoft.Json.Linq.JObject' to type 'FilesUploadedListResponse'."
文字列にある実際のJsonは次のとおりですjsonResult
。
"{\"uploadedfiles\":[],\"totalResults\":0,\"pageNumber\":0,\"pageSize\":0}"
アップロードされたファイルがまだないため、このuploadedFiles
結果では配列は空ですが、空にしても例外は発生しないはずです。空でない場合は、次のような応答が返されます。
{
"uploadedFiles": [
{
"id": 1,
"createdTime": "July 10, 2017 02:02:25 PM",
"filename": "20170710_14022507701.jpg",
"sentTime": "July 10, 2017 02:05:11 PM",
"fileSize": "124 KB"
},
{
"id": 2,
"createdTime": "June 05, 2017 09:39:25 AM",
"filename": "20170605_093907701.jpg",
"sentTime": "June 05, 2017 09:40:11 AM",
"fileSize": "1 MB"
}
],
"totalResults": 2,
"pageNumber": 0,
"pageSize": 2
}
これが私のFileUploadListResponse
クラスです:
public class FilesUploadedListResponse
{
public bool Success { get; set; }
public string Reason { get; set; }
public int StatusCode { get; set; }
public List<UploadedFile> UploadedFiles { get; set; }
public int TotalResults { get; set; }
public int PageNumber { get; set; }
public int PageSize { get; set; }
}
そして、ここに私のUploadedFile
クラスがあります:
public class UploadedFile
{
public int Id { get; set; }
public DateTime CreatedTime { get; set; }
public string Filename { get; set; }
public DateTime? SentTime { get; set; }
public string FileSize { get; set; }
}
JSON デシリアライゼーションについての私の理解は次のとおりです。
要素の大文字と小文字は、JSON 文字列の値と、逆シリアル化しようとしているクラス オブジェクトの間で問題になりません。
私がデシリアライズしようとしているクラスは、JSON 文字列内のプロパティが考慮されている限り、JSON 文字列で提供されているよりも多くのプロパティを持つことができます。
配列などの空のサブ配列は
UploadedFiles
、List<UploadedFile>
単純なことだと確信していますが、私はそれを見ていません。ここで何が欠けていますか?