这个问题对您来说很容易,但是我也一直在搜索SO,因此我找不到任何解决方案。如何将对象内部的对象集合发送到C#API方法,这是我尝试发送的代码
{
"Question":"sdvsdv",
"PollQuestions":
[
{
"QuestionText":"Question Text"
}
]
}
我也尝试了Advanced REST客户端(不仅是JS的),我可以看到父对象的参数值,但PollQuestions对象的参数都为空。
请提出解决方法。已经过了几天,我无法解决它。预先感谢。
编辑:
投票是一个简单的类,如下所示:
[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;
}
}
答案 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#类。使用this为C#
生成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)
{
}
当我发出邮递员请求时,轮询类已按预期完成。
这也是我的示例项目的链接: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?