【问题标题】:Asp.net MVC post json KeyValuePairAsp.net MVC 发布 json KeyValuePair
【发布时间】:2018-06-15 16:35:12
【问题描述】:

我在 c# 中有一个模型,它是

public class MyModelRequest { 
    public Dictionary<string, KeyValuePair<int, int>> Data {get;set;}
}

我想发布到控制器的动作并绑定到这个模型。

[HttpPost]
public void MyAction([FromBody] MyModelRequest model) {}

我认为这是我需要发布的内容:

{data: {
aname: {0, 10},
asecondname: {10, 5}
}}

但它不起作用。 KeyValuePair 包含 0, 0 而不是正确的值。知道如何发布吗?

【问题讨论】:

  • 这是一个模型还是属于模型一部分的属性?你怎么发帖?去哪里?
  • 在发布之前包含关于如何构建 JSON 的代码库。
  • 您希望我们如何帮助您提供所提供的信息???学习如何提问。 stackoverflow.com/help/how-to-ask
  • 嵌套字典不能很好地与模型绑定配合使用。为您的结构使用 POCO。
  • @Eric 我想我现在应该如何提问,但更多的是你需要检查礼貌。谢谢。

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


【解决方案1】:

正确的结构应该是这样的:

{
  "data": {
    "aname": {
      "key": 0,
      "value": 10
    },
    "asecondname": {
      "key": 10,
      "value": 5
    }
  }
}

public class MyModelRequest
{
    public Dictionary<string, MyKeyValuePair> Data { get; set; }
}
public class MyKeyValuePair
{
    public int Key { get; set; }
    public int Value { get; set; }
}

使用自定义 MyKeyValuePair 类允许绑定使用提供的 JSON。不理想,因为您正在寻找具有 KeyValuePair 的本机解决方案,但它可能会为您提供一条无需自定义模型绑定器即可为您工作的路径。

【讨论】:

  • 不抱歉。键值指定是我的第一次尝试,但它不是将数据发送到 asp.net mvc 的好时机。字典也一样。它不是数组好的键/值对象,而是单个对象。
【解决方案2】:

也许您可以尝试编写自定义模型绑定器并将您的 Json 转换为您想要的格式。 http://www.dotnetcurry.com/aspnet-mvc/1368/aspnet-core-mvc-custom-model-binding。您可以查看此链接以了解如何编写自定义活页夹

【讨论】:

  • 是的,它可以是一个解决方案,但对于这么小的事情来说就太多了。此外,我很确定我们可以原生绑定到键值对
【解决方案3】:

看起来你更需要这个模型:

[
{aname,{0, 10}},
{asecondname, {10, 5}}
]

【讨论】:

  • 不,抱歉,这不起作用。字典不是数组,而是对象,键是该对象的属性。它是这样工作的。不是没有绑定的字典,而是 KeyValuePay 的值
  • 好的,你说的我明白了。我想您可以尝试使用 Newtonsoft 序列化您的 Dictionary,检查您得到的内容,并在您尝试进行的调用中使用生成的结构
猜你喜欢
  • 2013-09-08
  • 2013-05-30
  • 1970-01-01
  • 1970-01-01
  • 2013-01-23
  • 2017-07-22
  • 1970-01-01
  • 1970-01-01
  • 2017-01-18
相关资源
最近更新 更多