JSON.NET 用空字符串序列化数组作为默认值

Posted

技术标签:

【中文标题】JSON.NET 用空字符串序列化数组作为默认值【英文标题】:JSON.NET serialize array with empty string for default values 【发布时间】:2019-10-29 17:40:33 【问题描述】:

这样的数组:

var arr = new object[] 0, string.Empty, null;

由 JSON.NET 序列化为:

[0,"",null]

我需要强制 JSON.NET 获得下一个结果(类型默认值根本没有值):

[,,]

有什么办法可以存档吗?

【问题讨论】:

这不是一个有效的 JSON,所以你无法做到这一点 【参考方案1】:
public static class JsonHelper
    
        public static string SerializeToMinimalJson(object obj)
        
            return JToken.FromObject(obj).RemoveEmptyChildren().ToString();
        

        public static JToken RemoveEmptyChildren(this JToken token)
        
            if (token.Type == JTokenType.Object)
            
                JObject copy = new JObject();
                foreach (JProperty prop in token.Children<JProperty>())
                
                    JToken child = prop.Value;
                    if (child.HasValues)
                    
                        child = child.RemoveEmptyChildren();
                    
                    if (!child.IsNullOrEmpty())
                    
                        copy.Add(prop.Name, child);
                    
                
                return copy;
            
            else if (token.Type == JTokenType.Array)
            
                JArray copy = new JArray();
                foreach (JToken item in token.Children())
                
                    JToken child = item;
                    if (child.HasValues)
                    
                        child = child.RemoveEmptyChildren();
                    
                    if (!child.IsNullOrEmpty())
                    
                        copy.Add(child);
                    
                
                return copy;
            
            return token;
        

        public static bool IsNullOrEmpty(this JToken token)
        
            return token == null ||
                   (token.Type == JTokenType.Array && !token.HasValues) ||
                   (token.Type == JTokenType.Object && !token.HasValues) ||
                   (token.Type == JTokenType.String && token.ToString() == String.Empty) ||
                   (token.Type == JTokenType.Null);
        

    

上面的类将删除空的孩子。 然后你可以像这样序列化你的对象:

var json = JsonHelper.SerializeToMinimalJson(obj);

【讨论】:

***.com/questions/36884902/…

以上是关于JSON.NET 用空字符串序列化数组作为默认值的主要内容,如果未能解决你的问题,请参考以下文章

从服务端到客户端怎么传输Sql的dataset,怎么把字节数组转化为字符串,在线等

使用JSON.Net(Newtonsoft.Json)作为ASP.Net MVC的json序列化和反序列化工具

数据结构(C++)——第四章 字符串和多维数组

使用字符串、int 数组反序列化 json - .net core C#

JSON.Net 将集合序列化为数组数组

JSON.NET与LINQ序列化示例教程