【问题标题】:Deserialization with Newtonsoft.Json使用 Newtonsoft.Json 进行反序列化
【发布时间】:2013-08-28 10:23:03
【问题描述】:

我有我的控制器,它可以发送一个 json 对象并再次接收相同的对象。 我的问题是 AjaxSaveFoo 创建了一个 Foo 对象,但我总是得到一个空对象。如何创建反序列化

/// <summary>
/// Returns a foo
/// </summary>
/// <returns></returns>
public JsonNetResult AjaxLoadFoo()
{
    return new JsonNetResult
    {
       Data = new Foo()
    };
}

/// <summary>
/// Saves a foo
/// </summary>
/// <returns></returns>
public JsonNetResult AjaxSaveFoo(Foo foo) //who tries to deserialize this!!, its always empty
{

    return new JsonNetResult
    {
        Data = foo
    };

}

我的客户端..

$.ajax({
    type: "POST",
    url: "AjaxSaveFoo",
    data: JSON.stringify(this._FooObj),
    success: this.saveSucces,
    dataType: "json",
    contentType: "application/json; charset=utf-8",
    error: this.saveFailure
});

Foo 当它被发送下来时..
{

"CustomerNumber": 2,
"CustomerStatus": "1"
}

Foo 提交时 (POST)

{"CustomerNumber":2,"CustomerStatus":"1"}

【问题讨论】:

  • 向我们展示 JS 和 C# 中的 Foo 对象。他们的定义似乎不匹配。
  • 我发现了错误.... url 应该是 AjaxSaveFoo/ 而不是 AjaxSaveFoo。这给了我来自服务器的 301(添加 /)但也导致客户端使用 GET,因此没有填充数据..*sigh*

标签: c# json asp.net-mvc-4


【解决方案1】:

您传递的对象未正确转换为 Foo 对象。

尝试更改签名以输入字符串,然后尝试反序列化:

public JsonNetResult AjaxSaveFoo(string json)
{
   var foo = JsonConvert.DeserializeObject<Foo>(json);
   return new JsonNetResult
   {
      Data = foo
   };
} 

【讨论】:

    【解决方案2】:

    我发现了错误....

    url 应该是 AjaxSaveFoo/ 而不是 AjaxSaveFoo。这给了我来自服务器的 301(添加 /)但也导致客户端使用 GET,因此没有填充数据..sigh

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多