在属性名称中使用点反序列化JSON

杰登·迈尔(Jayden Meyer)

我正在尝试将属性名称中带点的JSON反序列化为键值格式。我正在使用内置的ASP.NET MVC模型绑定。似乎将点解释为对象表示法,而不仅仅是键值对象。有什么方法可以使它正确地反序列化为忽略点的键值吗?这很重要,因为数据将需要再次以这种格式输出。

控制器动作

[HttpPost]
public ActionResult SaveProgress(int id, ProgressVM data)
{
    // ProgressVM Data property has an item with key "prop" and a null value, nothing else
}

查看模型

public class ProgressVM
{
    public int ID { get; set; }
    public Dictionary<string, string> Data { get; set; }
}

JSON范例

{
    "ID": 123,
    "Data": {
        "prop.0.name": "value",
        "prop.0.id": "value",
        "prop.1.name": "value",
        "prop.2.name": "value",
        "prop.3.name": "value"
    }
}
乳腺炎

首先,在操作中传递参数时POST,仅传递一个参数,而不传递多个参数。因此,尝试创建一个将包含Id和ProgressVM模型的模型。

现在,针对反序列化的问题。JsonValueProviderFactory似乎出了点问题,因为它没有绑定嵌套Dictionary<string, string>ProgressVM模型。我知道,因为我尝试ModelBinder为此模型创建一个,但是它在上失败DictionaryValueProvider,而不是绑定该Data属性。不幸的是,我没有搜索为什么会发生这种情况,这是一个错误JsonValueProviderFactory吗?我不知道,所以我迅速转到了另一个解决方法。

为什么不尝试将JSON字符串而不是模型提供给控制器,然后在控制器的主体中反序列化输入呢?看下面的例子:

JavaScript代码,使用jQuery AJAX发布数据

var data = {
    "ID": 123,
    "Data": {
        "prop.0.name": "value",
        "prop.0.id": "value",
        "prop.1.name": "value",
        "prop.2.name": "value",
        "prop.3.name": "value"
    }
}; 

$.ajax({
    url: '@Url.Action("SaveProgress", "Home")',
    data: { "data": JSON.stringify(data) },
    method: "POST"
});

ASP.NET MVC控制器操作

[HttpPost]
public ActionResult SaveProgress(string data)
{
    var json = JsonConvert.DeserializeObject<ProgressVM>(data);
    // Rest of code here
}

这是在回答您的问题吗?

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在属性名称中使用$反序列化JSON

来自分类Dev

在VB.NET中使用变量属性名称反序列化JSON

来自分类Dev

如何在同一对象中使用重复的属性名称反序列化JSON

来自分类Dev

没有属性名称的json反序列化数组

来自分类Dev

如何使用Json.Net反序列化以数字的属性名称开头的json?

来自分类Dev

如何在C#中使用json.net忽略序列化的属性,但保留反序列化

来自分类Dev

序列化/反序列化不同的属性名称?

来自分类Dev

如何使用非标准(和变化的)属性名称反序列化JSON(在.NET中)

来自分类Dev

使用Jackson反序列化包装在具有未知属性名称的对象中的JSON

来自分类Dev

如何使用非标准(和不同的)属性名称反序列化JSON(在.NET中)

来自分类Dev

使用没有属性名称的嵌套数组反序列化 JSON C#

来自分类Dev

反序列化Json XYZ点

来自分类Dev

使用未知对象名称反序列化JSON

来自分类Dev

Jackson:使用其他属性名称进行序列化/反序列化

来自分类Dev

在 kotlin 中使用 Gson 进行 Json 反序列化

来自分类Dev

使用动态属性反序列化 JSON

来自分类Dev

如何使用Play的JSON序列化/反序列化动态字段名称

来自分类Dev

使用 JSON 忽略序列化和反序列化中的参数名称

来自分类Dev

动态json属性反序列化

来自分类Dev

按属性反序列化JSON

来自分类Dev

使用json.net对对象属性进行条件序列化/反序列化

来自分类Dev

使用json.net中的属性的两个可能的属性名称进行反序列化?

来自分类Dev

在一个类中使用多个可能的对象名称反序列化JSON字符串

来自分类Dev

具有不同属性的相同属性名称的Json反序列化

来自分类Dev

是否可以反序列化和序列化具有不同属性名称的json对象?

来自分类Dev

使用restsharp反序列化JSON

来自分类Dev

使用Gson反序列化JSON

来自分类Dev

使用 NewtonSoft 反序列化 JSON

来自分类Dev

.NET Core 3.1中使用System.Text.Json进行反序列化会导致空属性值

Related 相关文章

  1. 1

    在属性名称中使用$反序列化JSON

  2. 2

    在VB.NET中使用变量属性名称反序列化JSON

  3. 3

    如何在同一对象中使用重复的属性名称反序列化JSON

  4. 4

    没有属性名称的json反序列化数组

  5. 5

    如何使用Json.Net反序列化以数字的属性名称开头的json?

  6. 6

    如何在C#中使用json.net忽略序列化的属性,但保留反序列化

  7. 7

    序列化/反序列化不同的属性名称?

  8. 8

    如何使用非标准(和变化的)属性名称反序列化JSON(在.NET中)

  9. 9

    使用Jackson反序列化包装在具有未知属性名称的对象中的JSON

  10. 10

    如何使用非标准(和不同的)属性名称反序列化JSON(在.NET中)

  11. 11

    使用没有属性名称的嵌套数组反序列化 JSON C#

  12. 12

    反序列化Json XYZ点

  13. 13

    使用未知对象名称反序列化JSON

  14. 14

    Jackson:使用其他属性名称进行序列化/反序列化

  15. 15

    在 kotlin 中使用 Gson 进行 Json 反序列化

  16. 16

    使用动态属性反序列化 JSON

  17. 17

    如何使用Play的JSON序列化/反序列化动态字段名称

  18. 18

    使用 JSON 忽略序列化和反序列化中的参数名称

  19. 19

    动态json属性反序列化

  20. 20

    按属性反序列化JSON

  21. 21

    使用json.net对对象属性进行条件序列化/反序列化

  22. 22

    使用json.net中的属性的两个可能的属性名称进行反序列化?

  23. 23

    在一个类中使用多个可能的对象名称反序列化JSON字符串

  24. 24

    具有不同属性的相同属性名称的Json反序列化

  25. 25

    是否可以反序列化和序列化具有不同属性名称的json对象?

  26. 26

    使用restsharp反序列化JSON

  27. 27

    使用Gson反序列化JSON

  28. 28

    使用 NewtonSoft 反序列化 JSON

  29. 29

    .NET Core 3.1中使用System.Text.Json进行反序列化会导致空属性值

热门标签

归档