【问题标题】:Pass collection of objects inside an object from js to C#将对象内的对象集合从 js 传递到 C#
【发布时间】:2019-01-25 19:48:13
【问题描述】:

这个问题对你来说可能很容易,但我在任何地方都找不到解决方案,我也在 SO 上搜索过。如何将对象内的对象集合发送到 C# API 方法,这是我尝试发送的代码

 {
  "Question":"sdvsdv",
  "PollQuestions":
            [
              {
                "QuestionText":"Question Text"
              }
            ]
}

我也尝试过高级 REST 客户端(不仅来自 JS),我可以看到父对象参数的值,但 PollQuestions 对象参数都是空的。

请提出解决方法。它已经几天了,我无法通过它。提前致谢。

编辑:

API 方法如下所示:

高级 Rest 客户端请求:

JS 请求:

投票是一个像这样的简单类:

[Serializable]
[DataContract(Namespace = "")]
public class Poll
{
    [DataMember]
    public string Question
    {
            get;
            set;
    }

    [DataMember]
    public Collection<PollQuestion> PollQuestions { get; set; }

}

PollQuestion 对象:

[Serializable]
public class PollQuestion : AnotherClass
{
    public string QuestionText
    {
            get;
            set;
    }
}

【问题讨论】:

  • ASP.NET Core,是吗?请打上相应的标签。
  • 怎么传json?请出示js代码。
  • 不是 ASP.NET,ASP.NET Core(和 asp.net-web-api 或 asp.net-mvc)。
  • 我已经添加了我一直在做的所有屏幕截图。
  • @Md.AbdulAlim [FromBody] 是任何复杂类型的默认值。

标签: javascript c# api asp.net-web-api asp.net-core


【解决方案1】:

如果问题是在C# 中映射请求 JSON,请尝试以下代码:

类结构:

public class PollQuestion
{
    public string QuestionText { get; set; }
}

public class RootObject
{
    public string Question { get; set; }
    public List<PollQuestion> PollQuestions { get; set; }
}

Post 中使用[FromBody] 属性将JSON 映射到C# 类:

public void YourMethod([FromBody] RootObject data)
{
 // your code to use request data
}

如果您使用 WebAPI version="5.2.3"(或者可能在较低版本中也受支持),则无需将请求的 JSON 序列化为 C# 类。使用thisJSON 生成C# 类。

对于 JSON 结构 C# 对待,

这个:

{

}

作为Object

这个:

[]

List&lt;&gt;Array

【讨论】:

    【解决方案2】:

    我在.NET Core 中设置了一个简单的示例项目,它似乎对我来说可以很好地处理您的 JSON 数据。

    这些是我使用的类:

    public class PollQuestion
    {
        public string QuestionText { get; set; }
    }
    
    public class Poll
    {
        public string Question { get; set; }
        public List<PollQuestion> PollQuestions { get; set; }
    }
    

    这里是API调用函数:

        [HttpPost]
        public void Post([FromBody]Poll value)
        {
    
        }
    

    当我发出邮递员请求时,投票类按预期填充。

    这里也是我的示例项目的链接:https://bitbucket.org/alleskapaul/ld42/downloads/JsonExample.zip

    您能否更改项目中的模型以匹配我的模型,看看是否可行?我的猜测是您的模型不正确,因为 JSON 请求也适用于我。如果它不工作,你可以上传一个示例项目,以便我看看我是否可以修改它来工作?

    【讨论】:

      【解决方案3】:

      我继承了一个使用 [DataContract] 和 [DataMember] 属性的类,因此我也必须将 DataMember 用于子类的所有参数。

      感谢大家的回答,但当参数为复杂类型时,API 方法中不需要 [FromBody]。

      如果您没有在类中的任何地方使用过 DataMember 并且也没有继承任何使用它的类,它也可以在没有 DataContract 和 DataMember 的情况下工作。

      您可以在此处获取更多信息:When to use DataContract and DataMember attributes?

      【讨论】:

        猜你喜欢
        • 2012-08-26
        • 1970-01-01
        • 1970-01-01
        • 2010-10-09
        • 2016-11-05
        • 1970-01-01
        • 1970-01-01
        • 2013-05-22
        • 1970-01-01
        相关资源
        最近更新 更多