如何在复杂的JSON对象中删除空字符串JSON值?

5

我正在尝试将JSON值上传到AWS Dynamo,但当我上传具有任何属性值为""的值时,它似乎会给我一个400类型的错误。我编写的应用程序是一个C#应用程序。

最好的方法是什么来删除任何值为""的键?我已经看到如何删除null值,但我不确定是否适用。

请说:

{myObj: { x: "", y: "test str" }, myStr: "hello world!"}

Becomes:

{myObj: { y: "test str" }, myStr: "hello world!"}

2
如何删除空值,为什么不能将逻辑从 obj.x == null 改为 obj.x == string.Empty - Stephen Gilboy
我不想要string.Empty,那不是我需要的。我需要整个键被删除。 - Abarnett
我不是在做任务,我只是想问一下为什么用于删除 null 值的逻辑不能被修改以删除与 string.Empty 匹配的属性。 - Stephen Gilboy
我想这完全可以。我不知道Json.NET是否提供了通用解决方案,其他的只是通过迭代树并检查值来实现的递归解决方案。这肯定可行,但我不知道是否有标准解决方案或其他东西。无论如何,非常感谢。我会尝试一下。 - Abarnett
2个回答

8
如果您正在使用Newtonsoft的Json.NET库,您可以使用JsonSerializerSettingsDefaultValue属性进行操作:
public class Rootobject
{
    public Myobj myObj { get; set; }
    public string myStr { get; set; }
}

public class Myobj
{
    [DefaultValue("")]
    public string x { get; set; }
    [DefaultValue("")]
    public string y { get; set; }
}

var originalSerializedObject = "{myObj: { x: \"\", y: \"test str\" }, myStr: \"hello world!\"}";

var deserializedObject = JsonConvert.DeserializeObject<Rootobject>(originalSerializedObject);

var serializerSettings = new JsonSerializerSettings 
                             { 
                                NullValueHandling = NullValueHandling.Ignore, 
                                DefaultValueHandling = DefaultValueHandling.Ignore 
                             };

var newSerializedObject = JsonConvert.SerializeObject(deserializedObject, serializerSettings);

Console.WriteLine(newSerializedObject);
//{"myObj":{"y":"test str"},"myStr":"hello world!"}

1
如果您不想将其应用于每个字段,您可以在希望忽略为空的字段上添加以下内容。
[DefaultValue("")]
[JsonProperty(NullValueHandling = NullValueHandling.Ignore, 
DefaultValueHandling = DefaultValueHandling.Ignore)]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接