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

问题描述 投票:1回答:3

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

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

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

enter image description here

请建议一个解决方案。这是几天,我无法通过它。提前致谢。

编辑:

以下是API方法的样子:enter image description here

Advanced 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;
    }
}
javascript c# api asp.net-web-api asp.net-core
3个回答
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
}

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

对于JSON结构C#对待,

这个:

JSON

作为C#

这个:

{

}

Object[]


2
投票

我在List<>中设置了一个简单的示例项目,它似乎对我的JSON数据工作正常。

这些是我使用的类:

Array

这是API调用函数:

.NET Core

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

这里也是我的示例项目的链接:public class PollQuestion { public string QuestionText { get; set; } } public class Poll { public string Question { get; set; } public List<PollQuestion> PollQuestions { get; set; } }

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


0
投票

我继承了一个使用[DataContract]和[DataMember]属性的类,所以我不得不将DataMember用于子类的所有参数。

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

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

您可以在这里获得更多信息: [HttpPost] public void Post([FromBody]Poll value) { }

© www.soinside.com 2019 - 2024. All rights reserved.