其他分享
首页 > 其他分享> > 我如何反序列化此JSON?

我如何反序列化此JSON?

作者:互联网

如何使用Web API(JSON.Net)反序列化以下JSON ?:

{
    "action": "edit",
    "table": "MainView",
    "id": "row_1377",
    "_group_id": "999",
    "data": {
        "ROTATION": "1", // This name/val can change
        "EQUIPMENT": [{
            "id": "6"
        },
        {
            "id": "8"
        }],
        "NOTES": ""
    }
}

数据中的值表示列,并且可以更改,因此无法使用例如一个字符串,名称为“ NOTES”,如json.net deserialize string to nested class.

注意EQUIPMENT包含多个值.当以前只是NOTES的“字符串:字符串”时,此JSON将数据反序列化为Dictionary< string,string&gt ;,但现在我需要使其表现得像其自己的字典一样.我最后的尝试是反序列化为以下类型:

public class EditorSubmissionJoined
{
    public string _group_id { get; set; }
    public string action { get; set; }
    public string table { get; set; }
    public string id { get; set; }
    // "public" added below due to mistake noticed by Maggie Ying
    public Dictionary<string, object> data { get; set; } // Trouble
}

我希望该对象可以在数据中包含任何内容,无论是KeyValuePair(例如NOTES)还是字典(例如EQUIPMENT).

我还尝试了Dictionary< string,ICollection< Object>>对象,甚至ICollection< Dictionary< string,Object&gt ;. 问题是我的控制器总是获得EditorSubmissionJoined,除了空值外什么都没有:

public void Put(EditorSubmissionJoined ajaxSubmission) {
    // ajaxSubmission has only NULL values
}

解决方法:

有几种方法可以做到.一种方法是简单地使用JObject并按名称访问字段,例如:jsonObject [“ data”] [“ ROTATION”].您可以使用JObject.Parse对它进行“反序列化”,然后仅将JSON文本“解析”为JObject.

或者,您可以编写自己的JsonConverter并告诉JSON.net在反序列化特定类型(例如JsonConverterAttribute)时使用该转换器.这需要在ReadJson覆盖中手动解析JSON文本的一部分,并且实际上取决于您期望的数据.

您还可以使用Preston评论的动态方法.

您选择哪种方法取决于您希望事物具有多强的类型.

标签:asp-net-web-api,json-net,asp-net-mvc-4,c
来源: https://codeday.me/bug/20191127/2074845.html