gpt4 book ai didi

c# - 您可以使用命名的 JSON 属性将复杂对象传递给 C# Controller 吗?

转载 作者:行者123 更新时间:2023-12-01 08:39:35 28 4
gpt4 key购买 nike

当我尝试在 JSON 对象中分配属性名称时,我在 Web API Controller 上的 POST 方法的参数中填充 C# 对象时遇到一些 JSON 数据问题。

这是我的 API Controller :

[HttpPost]
public HttpResponseMessage MyResource(MyComplexClass myClass)
{
var test = myClass.Name;

return Request.CreateResponse(HttpStatusCode.Created);
}

这是MyComplexClass:

public class MyComplexClass
{
public string Name { get; set; }
public string Id { get; set; }
}

这是我的 AJAX 调用:

<script>
function test() {
var innerData = {
Name: 'Bob Loblaw',
Id: "1"
};

var myData = {
myClass: innerData
};

$.ajax({
type: "POST",
url: "api/Test/MyResource",
data: JSON.stringify(myData),
contentType: "application/json",
dataType: "json",
success: function (response) {
// do success stuff
},
error: function (err) {
// do error stuff
}
});
}
</script>

问题是:当我将 innerData 对象作为属性包含在 JS 代码中的 myData 对象中时,myClass 的属性> 对象全部为null

我知道,如果我将 innerData 传递到 AJAX 调用本身,myClass 对象就会正确填充,但我很好奇关于为什么我不能使用命名 JSON 属性将复杂的 C# 对象传递给 Controller ​​。

有谁知道如何将 myClass 对象作为命名 JSON 属性传递,或者您能解释一下为什么我不能吗?

重新表述问题:

如果这个 JSON 对象:

var data = {
Name: 'Bob Loblaw',
Id: "1"
};

与此 Controller 方法匹配:

public HttpResponseMessage MyResource(string Name, string Id)

为什么这个 JSON 对象没有:

var data = {
myClass: { Name: 'Bob Loblaw', Id: "1" }
};

与此 Controller 方法匹配吗?

public HttpResponseMessage MyResource(MyComplexClass myClass)

附加问题:

是否可以将 API 方法声明为以下形式:

public HttpResponseMessage MyResource(MyComplexClass myClass, string anotherValue)

如果是这样,JSON 对象将如何构造?

最佳答案

为什么这个 JSON 对象没有:

var data = {
myClass: { Name: 'Bob Loblaw', Id: "1" }
};

与此 Controller 方法匹配吗?

public HttpResponseMessage MyResource(MyComplexClass myClass)

由于模型绑定(bind)在 WEB API 中的工作方式,当您发送时

var data = {
Name: 'Bob Loblaw',
Id: "1"
};

WEB API 将您发送的 json 对象的属性绑定(bind)到您定义为参数的类的属性。

所以,为了匹配

var data = {
myClass: { Name: 'Bob Loblaw', Id: "1" }
};

MyComplexClass 需要定义为

public class MyComplexClass
{
public Object myClass{ get; set; }
}

关于c# - 您可以使用命名的 JSON 属性将复杂对象传递给 C# Controller 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49262308/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com