【问题标题】:.Net Core CSharp Custom Json Deserialization.Net Core CSharp 自定义 Json 反序列化
【发布时间】:2020-11-30 15:18:04
【问题描述】:

如何在 .Net Core C# 中执行此对象的自定义反序列化,在此对象类中将 Afpak 分配为“字符串名称”。我有以下对象的 JSON 代码:

{
"Afpak": {
    "id": 1,
    "race": "hybrid",
    "flavors": [
        "Earthy",
        "Chemical",
        "Pine"
    ],
    "effects": {
        "positive": [
            "Relaxed",
            "Hungry",
            "Happy",
            "Sleepy"
        ],
        "negative": [
            "Dizzy"
        ],
        "medical": [
            "Depression",
            "Insomnia",
            "Pain",
            "Stress",
            "Lack of Appetite"
        ]
    }
}

编辑:注意对象类是应变,它从这个 json 的根获取变量名 - 在这种情况下,名称变量将是 Afpak,在这个 JSON 代码中有 100 个不同的应变类对象就是我所拥有的麻烦,因为如果它们都是同一个类,那么将每个类都创建为单独的类是没有意义的。

【问题讨论】:

    标签: c# json .net


    【解决方案1】:

    您应该实现一个类来公开您想要从该 JSON 对象映射的属性。 像这样的:

    public class AfpakDto{
       public string id {get;set;}
       public string race {get;set;}
       public string[] flavors {get;set;}
    }
    public class FooDto {
       public AfpakDto Afpak {get; set;}
    }
    

    然后使用您想要的任何库。这是一篇关于 System.Text.JSON 的好文章:https://docs.microsoft.com/en-us/dotnet/standard/serialization/system-text-json-how-to?pivots=dotnet-5-0

    【讨论】:

    • 问题是所有这些对象都是一个类,也就是说对象的根是这个类中变量的名称,有没有办法绕过它?
    • 我不确定我是否正确理解了您的意思。您的 JSON 对象有一个“Afpak”属性,它是一个复杂对象,而不是原始对象(例如字符串、数字等)。您必须定义一个映射它的类,并对层次结构中的每个“复杂对象”执行相同的操作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-13
    • 2021-05-12
    • 2012-01-19
    • 2018-04-02
    • 2011-04-12
    • 2013-01-18
    相关资源
    最近更新 更多