从 json 创建 c# 对象
Posted
技术标签:
【中文标题】从 json 创建 c# 对象【英文标题】:create c# object from json 【发布时间】:2021-12-30 03:16:42 【问题描述】:我有以下课程
class Configuration
public IConverter converter get; set;
public class htmlConverter : IConverter
public string Convert()
return "HTML Convertter";
public class JsonConverter : IConverter
public string Convert()
return "json Convertter";
public interface IConverter
string Convert();
而myjson文件是
"Configuration":
"Converter": "HtmlConverter"
从 JSON 文件,我想创建配置对象。
在 json 文件中,如果转换器设置为 "HtmlConverter"
,则应创建 HtmlConvert
对象,如果设置了 "JsonConverter"
,则应创建 JsonConverter
对象。
Configuration config = JsonConvert.DeserializeObject<Configuration>(jsonString);
【问题讨论】:
您的 JSON 根对象有一个属性“Configuration”,您的根 C# 类 (Configuration
) 只有一个属性“Converter”(在您的 JSON 的根对象中不存在)。跨度>
你需要编写自己的 Json.NET 合约解析器来实现这个逻辑。
为像你这样的简单文件创建转换器的最简单方法是创建一个新类,然后将 json 字符串复制到剪贴板,然后在可视化中转到“粘贴”->“作为 json 类”工作室。然后 VS 将创建一个模型,无需更多实现即可轻松序列化
【参考方案1】:
我认为在这里你需要使用一些工厂模式。比如你的类Configuration可以是这样的
public class Configuration
public string Convertor get; set;
public IConverter Create()
IConverter instance = (IConverter)Activator.CreateInstance("MyAssembly", $"MyNamespace.Convertor").Unwrap();
if (instance == null)
throw new Exception("Convertor not found");
return instance;
你会以这种方式使用它。
Configuration config = JsonConvert.DeserializeObject<Configuration>(jsonString);
var converter = config.Create();
但是如果你不想使用反射,你可以使用一些 if/else 或 switch 语句。但主要思想是使用工厂模式。
你的 json 文件也应该是这样的
"Convertor": "JsonConverter"
【讨论】:
以上是关于从 json 创建 c# 对象的主要内容,如果未能解决你的问题,请参考以下文章