N+1 Days of MvvmCross アプリケーション サンプルのレッスン 6 で簡単なアプリケーションを作成しようとしています。しかし、 json データのシリアル化の変換中に SimpleRestService で失敗しました。
private T Deserialize<T>(string responseBody)
{ // Error is here for deserilizing
var toReturn = _jsonConverter.DeserializeObject<T>(responseBody);
return toReturn;
}
ブラウザを介した私のJsonデータ:
[{"Desc":"All","Id":"0"},{"Desc":"割り当て済み","Id":"2"},{"Desc":"進行中","Id" :"3"},{"Desc":"解決済み","Id":"4"},{"Desc":"クローズ","Id":"5"},{"Desc":"保留" ,"Id":"6"},{"Desc":"低","Id":"8"},{"Desc":"承認待ち","Id":"9"},{"Desc ":"キャンセル済み","Id":"10"},{"Desc":"未解決","Id":"8"}]
responsebody のアプリケーションの Json データ:
[{\"Desc\":\"All\",\"Id\":\"0\"},{\"Desc\":\"Assigned\",\"Id\":\"2\ "},{\"Desc\":\"進行中\",\"Id\":\"3\"},{\"Desc\":\"解決済み\",\"Id\":\ "4\"},{\"Desc\":\"Closed\",\"Id\":\"5\"},{\"Desc\":\"Hold\",\"Id\" :\"6\"},{\"Desc\":\"低\",\"Id\":\"8\"},{\"Desc\":\"承認待ち\",\" Id\":\"9\"},{\"Desc\":\"キャンセル\",\"Id\":\"10\"},{\"Desc\":\"未解決\" ,\"ID\":\"8\"}]
エラーメッセージは次のように表示されます:
{Newtonsoft.Json.JsonSerializationException: JSON 配列 ([1,2,3]) を「Book.Core.Services.BookSearchResult」型に逆シリアル化できません。逆シリアル化された型は、配列であるか、IEnumerable、ICollection、IList などのコレクション インターフェイスを実装する必要があります。JSON 配列を強制的に逆シリアル化するには、JsonArrayAttribute を型に追加します。パス ''、行 1、位置 1。 .Json.Serialization.JsonSerializerInternalReader.CreateList (Newtonsoft.Json.JsonReader リーダー、System.Type objectType、Newtonsoft.Json.Serialization.JsonContract コントラクト、Newtonsoft.Json.Serialization.JsonProperty メンバー、System.
私のコード部分: クラス宣言:
public class BookSearchItem
{
public string Desc { get; set; }
public string Id { get; set; }
}
public class BookSearchResult
{
public List<BookSearchItem> items { get; set; }
}
拘束力のある宣言:
public void StartSearchAsync(string whatFor, Action<BookSearchResult> success, Action<Exception> error)
{
string address = string.Format("http://192.168.0.76/eFACiLiTYPhone/MobileService/WinPhoneWCFService.svc/callstatustesting");
_simpleRestService.MakeRequest<BookSearchResult>(address,"GET", success, error);
}
共通の簡単な休憩サービス:
public class SimpleRestService :ISimpleRestService
{
private readonly IMvxJsonConverter _jsonConverter;
public SimpleRestService(IMvxJsonConverter jsonConverter)
{
_jsonConverter = jsonConverter;
}
public void MakeRequest<T>(string requestUrl, string verb, Action<T> successAction, Action<Exception> errorAction)
{
var request = (HttpWebRequest)WebRequest.Create(requestUrl);
request.Method = verb;
request.Accept = "application/json";
MakeRequest(
request,
(response) =>
{
if (successAction != null)
{
T toReturn;
try
{
toReturn = Deserialize<T>(response);
}
catch (Exception ex)
{
errorAction(ex);
return;
}
successAction(toReturn);
}
},
(error) =>
{
if (errorAction != null)
{
errorAction(error);
}
}
);
}
private void MakeRequest(HttpWebRequest request, Action<string> successAction, Action<Exception> errorAction)
{
request.BeginGetResponse(token =>
{
try
{
using (var response = request.EndGetResponse(token))
{
using (var stream = response.GetResponseStream())
{
var reader = new StreamReader(stream);
successAction(reader.ReadToEnd());
}
}
}
catch (WebException ex)
{
Mvx.Error("ERROR: '{0}' when making {1} request to {2}", ex.Message, request.Method, request.RequestUri.AbsoluteUri);
errorAction(ex);
}
}, null);
}
private T Deserialize<T>(string responseBody)
{
var toReturn = _jsonConverter.DeserializeObject<T>(responseBody);
return toReturn;
}
}