将对象内部的对象集合从js传递到C#

时间:2018-08-19 12:59:32

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

这个问题对您来说很容易,但是我也一直在搜索SO,因此我找不到任何解决方案。如何将对象内部的对象集合发送到C#API方法,这是我尝试发送的代码

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

我也尝试了Advanced REST客户端(不仅是JS的),我可以看到父对象的参数值,但PollQuestions对象的参数都为空。

enter image description here

请提出解决方法。已经过了几天,我无法解决它。预先感谢。

编辑:

这是API方法的外观: enter image description here

高级Rest客户请求: enter image description here

JS请求: enter image description here

投票是一个简单的类,如下所示:

[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;
    }
}

3 个答案:

答案 0 :(得分:3)

如果您的问题是在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#类。使用thisC#生成JSON类。

对于JSON结构C#对待,

此:

{

}

Object

此:

[]

List<>Array

答案 1 :(得分: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)
    {

    }

当我发出邮递员请求时,轮询类已按预期完成。

Postman

Controller

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

您可以更改项目中的模型以匹配我的模型,看看是否可行?我的猜测是您的模型不正确,因为JSON请求也适用于我。如果无法正常工作,您可以上传示例项目,以便我查看是否可以对其进行修改吗?

答案 2 :(得分:0)

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

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

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

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