【问题标题】:Nancy with Complex object using JSON not working使用 JSON 的复杂对象的 Nancy 不起作用
【发布时间】:2018-08-26 22:41:29
【问题描述】:

客户端代码:

 var basket = {
            products: [],
            user: { name: "schugh" }
        };

    $("#basket table tr").each(function (index, item) {
        var product = $(item).data('product');
        if (product) {
            basket.products.push(product);
        }

    });

    $.ajax({
        url: "http://localhost:12116/basketrequest/1",
        async: true,
        cache: false,
        type: 'POST',
        data: JSON.stringify(basket),
        contentType: 'application/json; charset=utf-8',
        dataType: 'json',

        success: function (result) {
            alert(result);
        },
        error: function (jqXHR, exception) {
            alert(exception);
        }
    });

服务器代码:

 Post["/basketrequest/{id}"] = parameters =>
 {     
     var basketRequest = this.Bind(); //basketrequest is null
     return Response.AsJson(basketRequest , HttpStatusCode.OK);
 };

其他模型类:

[Serializable]
public class BasketRequest
{
    public User User;
    public List<Product> Products;
}

public class Product
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Category { get; set; }
    public decimal Price { get; set; }
    public ProductStatus ProductStatus { get; set; }
}

public enum ProductStatus
{
    Created,
    CheckedBy,
    Published
}

public class User
{
    public string Name { get; set; }
}

Nancy 模块中的代码this.Bind(); 返回null。如果我将 Complex 对象更改为 List&lt;Product&gt;,即没有包装器 BasketRequest,则该对象很好......

任何指针?

编辑:已发布 JSON:

{
  "User": { 
    "Name": "SChugh" 
  },
  "Products": [{ 
    "Id": 1,
    "Name": "Tomato Soup",
    "Category": "Groceries",
    "Price": 1
  }, { 
    "Id": 2,
    "Name": "Yo-yo",
    "Category": "Toys",
    "Price": 3.75
  }]
}

【问题讨论】:

  • 能发一下json吗,有没有试过泛型方法this.Bind&lt;BasketRequest&gt;()
  • { "User":{ "Name": "SChugh" }, "Products":[{"Id":1,"Name":"Tomato Soup","Category":"杂货","Price":1},{"Id":2,"Name":"Yo-yo","Category":"Toys","Price":3.75}] }
  • @jjchiw 我也尝试过小写,但也没有用!我被卡住了!
  • @jjchiw 我已经尝试过通用方法 this.Bind();这也行不通
  • 你在购物篮请求对象中的两个字段不应该是属性吗?

标签: nancy


【解决方案1】:

您的BasketRequest 对象应该实现属性而不是字段。所以

public class BasketRequest
{
    public User User { get; set; }
    public List<Product> Products { get; set; }
}

你也应该使用泛型方法

this.Bind<BasketRequest>();

【讨论】:

    猜你喜欢
    • 2016-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-28
    • 2019-06-22
    • 2018-02-14
    • 2011-11-04
    • 1970-01-01
    相关资源
    最近更新 更多