You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将JSON属性字典反序列化为对应的原始C#对象类型?

实现字典到原始对象的反向转换方法

你现有正向转换方法基于Json.NET的JObject实现,反向转换同样可以依托JObject作为中转,用单行LINQ即可完成,和你现有方法的依赖完全一致。

现有正向方法回顾

public static Dictionary<string, string> GetObjectPropertiesAsDic<T>(T obj) where T : class
{
    return JObject.FromObject(obj).Properties().ToDictionary(k => k.Name, v => v.Value?.ToString());
}

反向转换实现代码

using Newtonsoft.Json.Linq;
using System.Collections.Generic;
using System.Linq;

public static T DicToObject<T>(Dictionary<string, string> propertyDic) where T : class, new()
{
    return new JObject(propertyDic.Select(kv => new JProperty(kv.Key, kv.Value == null ? JValue.CreateNull() : new JValue(kv.Value)))).ToObject<T>();
}

注意点

  • 泛型约束增加new()是为了保证目标类型有无参构造函数,和绝大多数业务实体类的定义兼容
  • 代码单独处理了字典值为null的分支,避免空值转换抛出异常
  • 反序列化过程会自动按照目标类型的属性类型做值转换,比如数值、布尔值、日期、枚举等常见类型,只要正向序列化时ToString()输出的内容符合对应类型的JSON格式规范,都可以正确还原
  • 如果有特殊格式需求(比如自定义日期格式、枚举序列化规则),可以给ToObject<T>()传入自定义配置的JsonSerializer实例调整转换逻辑。

调用示例

// 定义测试实体
public class Product
{
    public string ProductName { get; set; }
    public decimal Price { get; set; }
    public int Stock { get; set; }
    public bool OnSale { get; set; }
}

// 正向转字典
var product = new Product { ProductName = "Mechanical Keyboard", Price = 399.99m, Stock = 120, OnSale = true };
var propertyDic = GetObjectPropertiesAsDic(product);

// 反向还原实体
var restoredProduct = DicToObject<Product>(propertyDic);

内容的提问来源于stack exchange,提问作者Veverke

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.03 02:54:40