I have a class. It has several properties lets say 10. Out of these 10, 3 are filled with data remaining 7 are blank.i.e. empty strings "" Used this link as reference. I would like only NON-NULL and NON-EMPTY string properties to be shown. But the end output has all 10 properties. I want only to see 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; }
      ....
}
}
I also tried with
 [JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
as the attribute too. No luck. I also did like this
 var t = JsonConvert.SerializeObject(usr, Newtonsoft.Json.Formatting.None,
                                                new JsonSerializerSettings
                                                    {NullValueHandling = NullValueHandling.Ignore});
where 'usr' is the User instance. By no luck I mean, the 't' comes back with all the 10 properties
{"userID":"vick187","ssn":"","empID":"","schemaAgencyName":"","givenName":"","familyName":"","password":"pwd1234",...}
So as you can see only userID and password are populated. But I have ssn, empID etc still showing up. I only want userID and password. Any help would be appreciated.
First, you should deserialize json to a Map<String, Object> . Second, loop the map entry to find out what key has null value or what key has value is instance of ArrayList but empty and remove from the Map . Last, serialize the Map to json . Type, TypeToken, GsonBuilder, Gson..
An empty string is not a valid json, then it fails.
Specifies the settings on a JsonSerializer object. Newtonsoft.Json. JsonSerializerSettings. Namespace: Newtonsoft.Json.
JSON is a format that encodes objects in a string. Serialization means to convert an object into that string, and deserialization is its inverse operation (convert string -> object). If you serialize this result it will generate a text with the structure and the record returned.
Just decorating the properties [JsonProperty(NullValueHandling = NullValueHandling.Ignore)] ONLY should do what you want.  Unless the property is getting set to an empty string.  
Just wondering, why do you need the DataMemeber attribute?
Here is a link to a working 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; }
}
                        If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With