3

私は最初の真剣な取り組みを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);

電話。

真面目なありがとう!

4

1 に答える 1

10

シリアル化された文字列がエスケープされているか、そのようなもので、JSON ストリームを表す文字列ではなく、文字列を表す文字列として表示されているようです。

例として:

string json = "{}";
string notJson = "\"{}\"";

たとえば、VSデバッガーを使用して文字列の生の値を確認してください。

于 2012-12-03T21:40:01.757 に答える