c# - 从 json 序列化对象中删除空字符串属性

标签 c# .net json serialization

我有课。它有几个属性,比如 10 个。在这 10 个中,3 个填充了数据,其余 7 个是空白的。即空字符串 ""使用了这个 link作为引用。我只想显示 NON-NULL 和 NON-EMPTY 字符串属性。但最终输出具有所有 10 个属性。我只想看 3。

namespace Mynamespace.ValueObjects
{
[DataContract]
public class User
{
      [DataMember(Name ="userID", IsRequired = false,EmitDefaultValue = false)]
    public string userID { get; set; }
      [DataMember(Name ="ssn", IsRequired = false,EmitDefaultValue = false)]
    public string ssn { get; set; }
      [DataMember(Name ="empID", IsRequired = false,EmitDefaultValue = false)]
    public string empID { get; set; }
      [DataMember(Name ="schemaAgencyName", IsRequired = false,EmitDefaultValue = false)]
    public string schemaAgencyName { get; set; }
      [DataMember(Name ="givenName", IsRequired = false,EmitDefaultValue = false)]
    public string givenName { get; set; }
      [DataMember(Name ="familyName", IsRequired = false,EmitDefaultValue = false)]
    public string familyName { get; set; }
      [DataMember(Name ="password", IsRequired = false,EmitDefaultValue = false)]
    public string password { get; set; }
      ....

}

我也试过

 [JsonProperty(NullValueHandling = NullValueHandling.Ignore)]

也作为属性。没有运气。我也喜欢这个

 var t = JsonConvert.SerializeObject(usr, Newtonsoft.Json.Formatting.None,
                                                new JsonSerializerSettings
                                                    {NullValueHandling = NullValueHandling.Ignore});

其中“usr”是用户实例。运气不好,我的意思是,'t' 返回所有 10 个属性

{"userID":"vick187","ssn":"","empID":"","schemaAgencyName":"","givenName":"","familyName":"","password":"pwd1234",...}

如您所见,仅填充了用户 ID 和密码。但我仍然显示 ssn、empID 等。我只想要用户名和密码。任何帮助将不胜感激。

最佳答案

只是装饰属性 [JsonProperty(NullValueHandling = NullValueHandling.Ignore)] ONLY 应该做你想做的。除非该属性被设置为空字符串。

只是想知道,为什么需要 DataMemeber 属性?

这是一个工作 dotnetfiddle 的链接

using System;
using Newtonsoft.Json;
using System.ComponentModel;

public class Program
{

    public static void Main()
    {
        var user = new User();

        user.UserID = "1234";
        user.ssn = "";

        var settings = new JsonSerializerSettings();

        settings.NullValueHandling = NullValueHandling.Ignore;
        settings.DefaultValueHandling = DefaultValueHandling.Ignore;


        Console.WriteLine(JsonConvert.SerializeObject(user, settings));
    }
}

public class User
{
    [DefaultValue("")]
    public string UserID { get; set; }

    [DefaultValue("")]
    public string ssn { get; set; }

    [DefaultValue("")]
    public string empID { get; set; }

    [DefaultValue("")]
    public string schemaAgencyName { get; set; }

    [DefaultValue("")]
    public string givenName { get; set; }

    [DefaultValue("")]
    public string familyName { get; set; }

    [DefaultValue("")]
    public string password { get; set; }
}

关于c# - 从 json 序列化对象中删除空字符串属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41287224/

相关文章:

c# - C#中匿名类型的性能

json - Docker -- 带有 json 的格式。多个占位符的特定占位符语法

ajax - jQuery:JSON 回调函数从未达到

c# - 将 DataTable 批量复制到 MySQL(类似于 System.Data.SqlClient.SqlBulkCopy)

c# - 获取图像中每种颜色的使用百分比

即使测试失败,C# 测试也始终返回 true

.net - 带有 IIS SSL 证书的 OpenPOP.POP3

c# - 使用 LINQ 提取数据时自动创建正确的对象类

c# - 为特定请求禁用 ASP.NET session 刷新

php - JSON字符串上的PHP/HTML多消息POST问题