zoukankan      html  css  js  c++  java
  • C# 序列化时处理NULL

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

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

    public object GetValue(object target)
    {
    object result = _MemberInfo.GetValue(target);
    if (_MemberInfo.PropertyType == typeof(string) && result == null) result = "";
    return result;

    }

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

    调用方式在Application_Start文件中配置:

    var formatter = GlobalConfiguration.Configuration.Formatters;
    formatter.Remove(GlobalConfiguration.Configuration.Formatters.XmlFormatter);
    formatter.Add(GlobalConfiguration.Configuration.Formatters.JsonFormatter);

    //格式化Json中的时间格式
    var timeConverter = new IsoDateTimeConverter
    {
    DateTimeFormat = "yyyy-MM-dd HH:mm:ss"
    };
    formatter.JsonFormatter.SerializerSettings.Converters.Add(timeConverter);
    formatter.JsonFormatter.SerializerSettings.ContractResolver = new NullToEmptyStringResolver();

  • 相关阅读:
    主线程 Looper.loop() 死循环为何不会ANR
    AIDL实例
    AIDL 的工作原理
    Flutter文本框TextField
    原理
    linux安装mysql可视化界面
    MySQL Workbench gnome-keyring-daemon错误的解决
    linux安装mysql以及修改密码和重启mysql等相关命令
    linux安装vlc视频播放器
    centos调整屏幕亮度
  • 原文地址:https://www.cnblogs.com/morpheusliu/p/8250696.html
Copyright © 2011-2022 走看看