私は最初の真剣な取り組みをJsonとの連携に取り入れ、それをあるアプリケーションから別のアプリケーションに戻しています。
私のアプリケーションは、.Net4.0Frameworkを使用するASP.NETMVC3アプリケーションです。
非常に単純なクラスをjsonとの間でシリアル化および逆シリアル化する必要があります。
public class ProxyRequestResultDetails
{
public string ApplicationName { get; set; }
public string ProxyValue { get; set; }
public bool ProxyRelationshipExists { get; set; }
}
クラスは何も継承または実装しません。
次のようにして、jsonに正常に変換できます。
string json = JsonConvert.SerializeObject(requestDetails);
作成されたjsonの例は次のとおりです。
"{\"ApplicationName\":\"Awesome App\",\"ProxyValue\":\"0\",\"ProxyRelationshipExists\":true}"
次に、次の呼び出しを行います。
ProxyRequestResultDetails deserializedTestRequestDetails =
JsonConvert.DeserializeObject<ProxyRequestResultDetails>(json);
これには、次のようなスタックトレースがあります。すべての内部例外を含めるようにフォーマットされています。
Method: CustomHandleErrorAttribute
Message: Error converting value "{\"ApplicationName\":\"Awesome App\",\"ProxyValue\":\"0\",\"ProxyRelationshipExists\":true}" to type 'ProxySetup.Models.ProxyRequestResultDetails'. Path '', line 1, position 98. Inner Error #1: Could not cast or convert from System.String to ProxySetup.Models.ProxyRequestResultDetails.
stack trace: at Newtonsoft.Json.Utilities.ConvertUtils.EnsureTypeAssignable(Object value, Type initialType, Type targetType)
at Newtonsoft.Json.Utilities.ConvertUtils.ConvertOrCast(Object initialValue, CultureInfo culture, Type targetType)
at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.EnsureType(JsonReader reader, Object value, CultureInfo culture, JsonContract contract, Type targetType)
これは非常に単純なオブジェクトのようです。私はおそらく単純なものが欠けていますが、例から正確に何を見つけることができません。どんな考えでもいただければ幸いです。
編集1
深刻なのは正しいです。それがまさに起こっていることですが、私はそれをどのように適合させるかわかりません。私がやろうとしているのは、Webサービス呼び出しのように使用できるように、コントローラーでアクションを公開することです。アクションで生の文字列として作成されたjsonは次のとおりです。
{"ApplicationName":"Awesome App","ProxyValue":"0","ProxyRelationshipExists":true}
ただし、アクションによって返されたjson(returnタイプはJsonResult)
return Json(json, "application/json; charset=utf-8", JsonRequestBehavior.AllowGet);
は:
"{\"ApplicationName\":\"Awesome App\",\"ProxyValue\":\"0\",\"ProxyRelationshipExists\":true}"
考え?
編集2-解決済み
これは十分に単純でした。アクションの戻りタイプをに変更しました
string
そして、結果の文字列を:から返しました。
string json = JsonConvert.SerializeObject(requestDetails);
電話。
真面目なありがとう!