json.net在序列化和反序列化一个非常简单的类时抛出了一个错误



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

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

我需要将一个非常简单的类序列化到json并从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);

呼叫。

谢谢,认真!

您的序列化字符串似乎已被转义或类似操作,使其显示为表示字符串的字符串,而不是表示JSON流的字符串。

例如:

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

因此,例如使用VS调试器检查字符串的原始值。

相关内容

  • 没有找到相关文章

最新更新