无法为C#Web服务

时间:2015-10-11 05:52:54

标签: javascript c# arrays angularjs asp.net-web-api2

我的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服务只显示空值。

enter image description here

这是调用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; }
}

1 个答案:

答案 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; }
}