当前位置: 首页 > 面试题库 >

如何使用NewtonSoft JsonConvert反序列化名称中带有破折号(“-”)的属性?

齐英韶
2023-03-14
问题内容

我们有一个JSON对象,其中一个对象的名称中带有短划线。例如下面。

{
    "veg": [
        {
            "id": "3",
            "name": "Vegetables",
            "count": "25"
        },
        {
            "id": "4",
            "name": "Dal",
            "count": "2"
        },
        {
            "id": "5",
            "name": "Rice",
            "count": "8"
        },
        {
            "id": "7",
            "name": "Breads",
            "count": "6"
        },
        {
            "id": "9",
            "name": "Meals",
            "count": "3"
        },
        {
            "id": "46",
            "name": "Extras",
            "count": "10"
        }
    ],
    "non-veg": [
        {
            "id": "25",
            "name": "Starters",
            "count": "9"
        },
        {
            "id": "30",
            "name": "Gravies",
            "count": "13"
        },
        {
            "id": "50",
            "name": "Rice",
            "count": "4"
        }
    ]
}

我们如何反序列化此json?


问题答案:

您可以使用DataContractJsonSerializer实现此目的

[DataContract]
public class Item
{
    [DataMember(Name = "id")]
    public int Id { get; set; }
    [DataMember(Name = "name")]
    public string Name { get; set; }
    [DataMember(Name = "count")]
    public int Count { get; set; }
}

[DataContract]
public class ItemCollection
{
    [DataMember(Name = "veg")]
    public IEnumerable<Item> Vegetables { get; set; }
    [DataMember(Name = "non-veg")]
    public IEnumerable<Item> NonVegetables { get; set; }
}

现在您可以使用以下方式反序列化它:

string data;

// fill the json in data variable

ItemCollection collection;
using (MemoryStream ms = new MemoryStream(Encoding.Unicode.GetBytes(data)))
{
    DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(ItemCollection));
    collection = (ItemCollection)serializer.ReadObject(ms);
}


 类似资料:
  • 问题内容: 尝试反序列化此JSON: 我的课: 我猜因为它在我的班级中具有cumulative_stats变量名称,所以不会反序列化accurate-stats,如何用破折号反序列化那个东西? 问题答案: 一种替代方法是使用DataContractJsonSerializer而不是JavascriptSerializer。 如果您这样声明类: 您可以像这样反序列化: 将产生:

  • 问题内容: 我正在看http://docs.jquery.com/Plugins/Authoring#Defaults_and_Options为jQuery创建一个简单的插件。在有关选项和设置的部分之后,我执行了以下操作,该操作不起作用(脚本遇到设置后退出)。 一旦我从背景色中删除了破折号,一切就可以正常工作。 我是否缺少某些内容,或者jQuery文档是否错误? 问题答案: 没有。解析器会将其解释

  • 问题内容: 我有一个名称为dash的现有python模块foo-bar.py 我希望避免更改模块名称,因为该模块是共享的,我将不得不追踪所有使用该模块的位置,以便我的特殊情况能够起作用。 有没有办法加载名称包含通常被禁止的“-”的模块? (我确实知道这不是最佳实践。但是,在这种情况下,我宁愿不要重新设计和测试更多的应用程序。而且,我不认为我的公司老板会赞成我花时间实施这样的变化。) 问题答案: 您

  • 问题内容: 我有yaml文件的片段: 但我无法使用方法名称创建pojo 有什么方法可以解析此类Yaml文件? 问题答案: 您可以传递自定义PropertyUtils来处理此类情况

  • 我有一个values.yaml,我将一个值存储在一个属性中,还有一个deployment.yaml,我尝试将该值赋给一个环境变量。问题是属性名包含破折号,并抛出以下错误消息。 “空值”是因为我试图将名称引用为 {{ Values.security.enablemockservice | 引号 }},而不使用缓行绑定的破折号,但实际的属性名称是 Values.security.enable-mock

  • 问题内容: 我正在使用jq,但json标记中包含“-”使jq无法编译。我无法逃脱它使其工作。这里的命令 我已经在jq的github上阅读了这篇帖子https://github.com/stedolan/jq/issues/202,但我无法使其正常运行。 这是curl的输出 任何想法? 问题答案: 您需要用方括号和双引号引起来: 使用您给定的输入,它返回: 该JQ手册(开发) - >基本过滤器: 最