我的app中有一个JavaScript对象,它有一个数组对象,在服务器端,是一个具有两个属性(Name,Value)的对象的集合。
我确定我在这里缺少一些简单的东西,因为我已经盯着它看了太久,但是当下面的代码进入C#Web服务时,CustomProperties对象就是一个包含4个对象的数组。但是,每个Name和Value属性都为null。
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; }
这是CustomPropertyInfo类。
[Serializable]
public class CustomPropertyInfo : ICustomPropertyInfo
{
public string Name { get; set; }
public string Value { get; set; }
}
答案 0 :(得分:2)
问题是由于Json Serializer不知道如何正确反序列化集合而引起的。解决此问题的最简单方法是使用Json属性标记CustomPropertyInfo类,以告诉Json.Net如何处理此对象。这消除了序列化/反序列化通用List导致的任何混淆。
[Serializable]
[JsonObject(MemberSerialization.OptIn)]
public class CustomPropertyInfo : ICustomPropertyInfo
{
[JsonProperty("Name")]
public string Name { get; set; }
[JsonProperty("Value")]
public string Value { get; set; }
}