使用ASP.NET反序列化复杂的JSON对象?

时间:2010-02-02 18:27:12

标签: c# javascript json serialization

我已经成功创建了序列化复杂javascript对象的代码并将其发布到ASP.NET页面。我可以使用Request.Form获取JSON字符串,结果看起来像这样(我为可读性添加了缩进):

    {
    "gasterPerStolPerVecka": {
        "name": "gasterPerStolPerVecka",
        "keyValue_id": "2",
        "set_id": "1",
        "containerElement": "#gasterPerStolPerVecka",
        "keyValueComponents": [
            {
                "name": "gasterPerStolPerVecka_guestsPerWeek",
                "value": "200"
            },
            {
                "name": "gasterPerStolPerVecka_numberOfChairs",
                "value": "100"
            }
        ],
        "keyValueUnitText": "gäster/stol per vecka",
        "keyValueCalculationMethod": "divide",
        "isValid": true,
        "result": 2
    },
    "tillgangligaStolstimmarPerVecka": {
        "name": "tillgangligaStolstimmarPerVecka",
        "keyValue_id": "1",
        "set_id": "1",
        "containerElement": "#tillgangligaStolstimmarPerVecka",
        "keyValueComponents": [
            {
                "name": "tillgangligaStolstimmarPerVecka_openHoursPerWeek",
                "value": "35"
            },
            {
                "name": "tillgangligaStolstimmarPerVecka_numberOfChairs",
                "value": "100"
            }
        ],
        "keyValueUnitText": "stolstimmar/vecka",
        "keyValueCalculationMethod": "multiply",
        "isValid": true,
        "result": 3500
    },
    "planeradIntaktPerTillgangligStolOchVecka": {
        "name": "planeradIntaktPerTillgangligStolOchVecka",
        "keyValue_id": "",
        "set_id": "",
        "containerElement": "#planeradIntaktPerTillgangligStolOchVecka",
        "keyValueComponents": [
            {
                "name": "planeradIntaktPerTillgangligStolOchVecka_weeklyRevenue",
                "value": ""
            },
            {
                "name": "planeradIntaktPerTillgangligStolOchVecka_numberOfChairs",
                "value": "100"
            }
        ],
        "keyValueUnitText": "kr",
        "keyValueCalculationMethod": "divide",
        "isValid": false,
        "result": null,
        "errorText": "Ofullständigt underlag för beräkning."
    },
    "planeradIntaktPerTillgangligaStolstimmar": {
        "name": "planeradIntaktPerTillgangligaStolstimmar",
        "keyValue_id": "",
        "set_id": "",
        "containerElement": "#planeradIntaktPerTillgangligaStolstimmar",
        "keyValueComponents": [
            {
                "name": "planeradIntaktPerTillgangligaStolstimmar_weeklyRevenue",
                "value": ""
            },
            {
                "name": "planeradIntaktPerTillgangligaStolstimmar_openHoursPerWeek",
                "value": "35"
            },
            {
                "name": "planeradIntaktPerTillgangligaStolstimmar_numberOfChairs",
                "value": "100"
            }
        ],
        "keyValueUnitText": "kr",
        "keyValueCalculationMethod": "divide_divide",
        "isValid": false,
        "result": null,
        "errorText": "Ofullständigt underlag för beräkning."
    }
}

现在我尝试在服务器端反序列化,但这很困难。我一直收到错误:

[NullReferenceException:对象引用未设置为对象的实例。]

我不知道从哪里开始寻找错误?

提前致谢! / Thomas Kahn

2 个答案:

答案 0 :(得分:1)

使用stringify而不是序列化

答案 1 :(得分:0)

您需要为ASP.NET使用反序列化库。有关可用的库,或者可能有一个内置于ASP.NET中的库,请参阅http://json.org/。无论哪种方式,代码将如下所示:

String s = getAppropriateFormField();
Object o = JSONLibraryPackage.parse(s);

显然,您必须填写空白表以获取表单字段,然后填写解析的包和方法。