3

我正在第一次认真尝试使用 Json 并将其从一个应用程序返回到另一个应用程序。

我的应用程序是一个使用 .Net 4.0 Framework 的 ASP.NET MVC 3 应用程序。

我需要序列化和反序列化一个非常简单的类来和来自 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(返回类型为 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 回答