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序列化和反序列化工具