Json 数据在EasyUI框架下绑定, null 数据类型出现异常导致空白的解决方法

本文介绍如何解决EasyUI框架中实体模型转JSON时出现的null值问题,导致前端无法正确绑定数据。通过自定义两个类来实现将null转换为空字符串,从而确保JSON数据的正确性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

EasyUI 是一个轻量化,快速化,对 Ajax提供很好支持的后台界面框架,经典框架采用ASP.NET Entity + EasyUI 来进行快速开发,这中间就难免会遇到一个棘手的问题,实体模型转JSON数据,当然微软官方提供了实体转JSON的方法,我们使用using Newtonsoft.Json, 通过nuget 进行引用。但中间遇到的一个棘手的问题, 转换完成后,极端的可能下,字符串中会出现 key:null, 这样的组合,注意是 null, 不带字符串双引号。此时这样的JSON字符串返回前台绑定的时候,就会出现一片空白。
在这里插入图片描述
就是如上图,数据返回格式一切正常,就是前台不显示。

解决方法:写两个类,分别继承自 DefaultContractResolver 和 IValueProvider

public class NullToEmptyStringResolver : DefaultContractResolver
{
    protected override IList<JsonProperty> CreateProperties(Type type, MemberSerialization memberSerialization)
    {
        return type.GetProperties().Select(p =>{var q = base.CreateProperty(p, memberSerialization);q.ValueProvider = new NullToEmptyStringValueProvider(p);return q;}).ToList();
    }
}

public class NullToEmptyStringValueProvider : IValueProvider
{
    PropertyInfo _MemberInfo;
    public NullToEmptyStringValueProvider(PropertyInfo memberInfo)
    {
        _MemberInfo = memberInfo;
    }

    public object GetValue(object target)
    {
        object result = _MemberInfo.GetValue(target, null);

        if (result == null)
        {
            result = "";
        }

        return result;
    }

    public void SetValue(object target, object value)
    {
        _MemberInfo.SetValue(target, value, null);
    }
}

然后这两个类,在 JsonConvert.SerializeObject 转换实体的时候,对于 null 类型值,替换为字符串的""
, 转换以后就变成 key: “”, 然后前台绑定JSON就一切正常。

        JsonSerializerSettings settings = new JsonSerializerSettings();

        settings.Converters.Add(new IsoDateTimeConverter { DateTimeFormat = "yyyy-MM-dd HH:mm:ss" });

        settings.ContractResolver = new NullToEmptyStringResolver(); //liuwei 注意此处
        
        return JsonConvert.SerializeObject(t, settings);

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值