首页 新闻 会员 周边

Newtonsoft.Json 中 json数据中的 null如何转换成 ""

0
悬赏园豆:100 [已解决问题] 解决于 2016-08-08 14:30
Newtonsoft.Json 中 json数据中的 null如何转换成 ""?个人只看到一个忽略空值的属性
JsonSerializerSettings jsetting=new JsonSerializerSettings();
 jsetting.NullValueHandling = NullValueHandling.Ignore;

json:

{ Name = "Jack", Age = 31, Gender = "Male", DepartmentName = "Personnel Department", Leader = null }

转换的结果:
{ Name = "Jack", Age = 31, Gender = "Male", DepartmentName = "Personnel Department", Leader = ""}

如何使json串中的 null能转成 "" ,求解!


雨之秋水的主页 雨之秋水 | 小虾三级 | 园豆:649
提问于:2016-08-06 12:57
< >
分享
最佳答案
1

需要自己写一个NullToEmptyStringResolver,下面的代码来自Json Convert empty string instead of null

var settings = new JsonSerializerSettings() { ContractResolver= new NullToEmptyStringResolver() };
var str = JsonConvert.SerializeObject(yourObj, settings);
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);
    }
}
收获园豆:90
dudu | 高人七级 |园豆:31007 | 2016-08-06 14:18

在webapi里怎么配置他自动这样转?

PS:已解决.在全局配置里替换下就行了.

吴瑞祥 | 园豆:29449 (高人七级) | 2016-08-08 10:20

dudu现身,有点小激动!!!  

雨之秋水 | 园豆:649 (小虾三级) | 2016-08-08 14:36

@吴瑞祥: 全局配置?

不写接口 | 园豆:17 (初学一级) | 2017-10-15 13:24
其他回答(4)
0

直接字符串替换不就好了么 null 替换成“”

http://www.cnblogs.com/yanweidie/p/4605212.html

收获园豆:5
小眼睛老鼠 | 园豆:2731 (老鸟四级) | 2016-08-06 13:07

直接替换很麻烦

这个文章有看过。

支持(0) 反对(0) 雨之秋水 | 园豆:649 (小虾三级) | 2016-08-08 14:27
0

你这个问题和我一样诶.

我之前只给了20分了.你愿意给100呢.好多..

收获园豆:3
吴瑞祥 | 园豆:29449 (高人七级) | 2016-08-06 13:24

只要能解决问题,200分也是可以的

支持(0) 反对(0) 雨之秋水 | 园豆:649 (小虾三级) | 2016-08-08 14:28
0

自己搞一个Converter 当做参数传递进去就好了

JSONObject.serialize(obj,converter)

收获园豆:2
| 园豆:780 (小虾三级) | 2016-08-07 23:23

直接转换的DataTable,会出现null。

支持(1) 反对(0) 雨之秋水 | 园豆:649 (小虾三级) | 2016-08-08 14:29
0

mark.

TakeTry | 园豆:238 (菜鸟二级) | 2017-10-15 13:04
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册