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

.NET Core 1.0中不使用序列化将JSON转为自定义对象的方法

解决.NET Core 1.0中JSON转自定义对象的序列化依赖问题

针对你遇到的问题——因为引用了带[Serialize]特性(推测是DataContract相关特性的笔误)的.NET Framework 4.5 DLL,在.NET Core 1.0中使用Json.NET反序列化时找不到System.Runtime.Serialization程序集,这里有几个可行的解决方案,不需要修改原有DLL:

方案1:安装缺失的序列化依赖包

.NET Core 1.0默认没有包含完整的System.Runtime.Serialization组件,但可以通过NuGet安装兼容的基础包来补全依赖:

  • 打开NuGet包管理器,安装System.Runtime.Serialization.Primitives的4.3.0版本(该版本适配.NET Core 1.0)
  • 或者在Package Manager Console执行命令:
Install-Package System.Runtime.Serialization.Primitives -Version 4.3.0

这个方案最省心,安装后Json.NET应该能正常加载所需的序列化相关类型,和你在.NET Core 2.0中的表现一致。

方案2:配置Json.NET忽略DataContract特性

如果安装依赖包后还是有问题,可以让Json.NET忽略模型上的序列化特性,改用默认的公共属性序列化规则,这样就能绕过对System.Runtime.Serialization的依赖:

public CustomObject ConvertToObject(string jsonString)
{
    var settings = new JsonSerializerSettings
    {
        // 使用默认契约解析器,不考虑DataContract/DataMember特性
        ContractResolver = new DefaultContractResolver()
    };
    return JsonConvert.DeserializeObject<CustomObject>(jsonString, settings);
}

注意:如果原模型是通过[DataMember]指定要序列化的属性,这个方案会序列化所有公共属性,需要确保JSON字段和对象的公共属性名对应一致。

方案3:手动解析JSON并映射对象(完全绕开序列化)

如果上面两个方案都不适用,你可以完全跳过序列化过程,手动解析JSON并给对象赋值:

using Newtonsoft.Json.Linq;

public CustomObject ConvertToObject(string jsonString)
{
    var jsonObj = JObject.Parse(jsonString);
    var customObj = new CustomObject();
    
    // 逐个映射属性,根据实际属性类型调整
    customObj.Id = jsonObj["Id"]?.Value<int>() ?? 0;
    customObj.Name = jsonObj["Name"]?.ToString();
    customObj.CreatedDate = jsonObj["CreatedDate"]?.Value<DateTime>();
    
    return customObj;
}

这个方法完全不依赖任何序列化特性,也不会触发对System.Runtime.Serialization的加载,缺点是如果对象属性较多,需要写较多的映射代码,但胜在稳定可控。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 06:47:38