c# - 根据类型反序列化json字符串

标签 c# json.net

有这样的 json 字符串(我无法控制发布者):

{
  "TypeName": "Type1"
}

{
  "TypeName": "Type1"
}

这是动态反序列化 json 字符串的可接受方式吗?:

public class DeserializationFactory
{
    public static IPoco GetEvent(string jsonString)
    {
        var o = JObject.Parse(jsonString);
        IPoco poco = null;
        switch (o["TypeName"].ToString())
        {
        case "Type1":
            poco = JsonConvert.DeserializeObject<Type1>(jsonString);
            break;

        case "Type2":
            poco = JsonConvert.DeserializeObject<Type2>(jsonString);
            break;
        }
        return poco;
    }
}

最佳答案

你可以试试JsonSubtypes转换器实现和此布局:

    [JsonConverter(typeof(JsonSubtypes), "TypeName")]
    [JsonSubtypes.KnownSubType(typeof(Type1), "Type1")]
    [JsonSubtypes.KnownSubType(typeof(Type2), "Type2")]
    public interface IPoco
    {
        string TypeName { get; }
    }

    public class Type1 : IPoco
    {
        public string TypeName { get; } = "Type1";
        /* ... */
    }

    public class Type2 : IPoco
    {
        public string TypeName { get; } = "Type2";
        /* ... */
    }

关于c# - 根据类型反序列化json字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35182949/

相关文章:

c# - 使用 if 语句确定最高值

c# - EF 4.1 DbContext Generattor - 将实体放在不同的项目中?

c# - 如何使用 JSON.NET 序列化静态或 const 成员变量?

c# - 检查实体是否在 Code First 中的其他实体中有引用

c# - b/w public variable 和 public auto 属性有什么区别

c# - 如何使用正则表达式在特定字符串/字符之后找到字符串

c# - 使用包含奇怪变量的数据使用 JSON.NET 反序列化 JSON

C# 属性值作为 Json 键名称

xml - JSON.NET - 我可以提示要解析的 XML 类型吗?

c# - Web API 项目在部署时不会运行 - 无法加载文件或程序集 'Newtonsoft.Json,版本 = 4.5.0.0