无法加载C#web服务的JavaScript数组
我的应用程序中有一个JavaScript对象,它有一个数组对象,在服务器端,它是一个具有两个属性(名称、值)的对象集合 我确信我在这里遗漏了一些简单的东西,因为我已经盯着它看太久了,但是当下面的代码将其发送到C#web服务时,CustomProperties对象作为4个对象的数组。但是,每个名称和值属性都是空的无法加载C#web服务的JavaScript数组,javascript,c#,arrays,angularjs,asp.net-web-api2,Javascript,C#,Arrays,Angularjs,Asp.net Web Api2,我的应用程序中有一个JavaScript对象,它有一个数组对象,在服务器端,它是一个具有两个属性(名称、值)的对象集合 我确信我在这里遗漏了一些简单的东西,因为我已经盯着它看太久了,但是当下面的代码将其发送到C#web服务时,CustomProperties对象作为4个对象的数组。但是,每个名称和值属性都是空的 myObject.CustomProperties = []; myObject.CustomProperties.push({ Name: "FirstName", Value: $
myObject.CustomProperties = [];
myObject.CustomProperties.push({ Name: "FirstName", Value: $scope.userInfo.FirstName });
myObject.CustomProperties.push({ Name: "LastName", Value: $scope.userInfo.LastName });
myObject.CustomProperties.push({ Name: "Email", Value: $scope.userInfo.Email });
myObject.CustomProperties.push({ Name: "PortalId", Value: portalId });
我也试过这个
myObject.CustomProperties = [];
myObject.CustomProperties.push({ "Name": "FirstName", "Value": $scope.userInfo.FirstName });
myObject.CustomProperties.push({ "Name": "LastName", "Value": $scope.userInfo.LastName });
myObject.CustomProperties.push({ "Name": "Email", "Value": $scope.userInfo.Email });
myObject.CustomProperties.push({ "Name": "PortalId", "Value": portalId });
上述所有变量在调试器中都有值,但数组不能正确加载,因为web服务只显示空值
这是调用web服务的代码。不过,我已经删除了我认为不必要的部分
factory.callPostService("ActionName", myObject)
.success(function (data) {
// nothing in here happens
})
.error(function (data, status) {
// this always occurs
$scope.HasErrors = true;
console.log("Unknown error occurred calling ActionName");
console.log(data);
});
我使用的服务器端代码看起来与我的其他类和属性几乎相同
下面是我的示例中myObject的属性
public List<CustomPropertyInfo> CustomProperties { get; set; }
导致此问题的原因是Json序列化程序不知道如何正确地反序列化集合。解决此问题的最简单方法是使用Json属性标记CustomPropertyInfo类,以告知Json.Net如何处理此对象。这消除了序列化/反序列化泛型列表所引起的任何混乱
[Serializable]
[JsonObject(MemberSerialization.OptIn)]
public class CustomPropertyInfo : ICustomPropertyInfo
{
[JsonProperty("Name")]
public string Name { get; set; }
[JsonProperty("Value")]
public string Value { get; set; }
}
我已按要求添加了一个额外的代码段。:)可以添加
$scope.userInfo
对象。declareuserInfo在以前的web服务调用中成功加载,然后在表单中更新。这些对象在web developer工具中显示其预期值您需要显示加载阵列服务器端的代码/注释。客户端代码正确地生成了一个至少包含给定名称的数组,因此,如果服务器端的Name
看到null
,这就是服务器端的问题。服务器端,对象的其余部分似乎序列化得很好,而这个特定对象只是一个对象列表。我已经更新了我的问题,以显示该属性和对象。
[Serializable]
[JsonObject(MemberSerialization.OptIn)]
public class CustomPropertyInfo : ICustomPropertyInfo
{
[JsonProperty("Name")]
public string Name { get; set; }
[JsonProperty("Value")]
public string Value { get; set; }
}