Codemepro

How to Exclude Properties From JSON Serialization in C#

  • Share this:

Introduction

JSON (JavaScript Object Notation) is a popular data interchange format that is widely used in web development and APIs. When working with JSON in C#, you may encounter situations where you want to exclude certain properties from the serialization process. This article will show you how to exclude properties from JSON serialization in C#.

Using the JsonIgnore Attribute

The simplest way to exclude a property from JSON serialization is to mark it with the `[JsonIgnore]` attribute. When you serialize an object that contains a property with this attribute, the property will be excluded from the output JSON.

Here's an example:

public class Person
{
    public string Name { get; set; }
    [JsonIgnore]
    public string Password { get; set; }
    public string Address { get; set; }
}

var person = new Person
{
    Name = "John Doe",
    Password = "s3cr3t",
    Address = "123 Main St"
};

var json = JsonConvert.SerializeObject(person);

In this example, the `Password` property is marked with the `[JsonIgnore]` attribute, so it will be excluded from the serialized JSON. The `Name` and `Address` properties will still be included in the output.

Using the JsonProperty Attribute

Another way to exclude a property from JSON serialization is to use the `[JsonProperty]` attribute to rename the property to an empty string. When a property is renamed to an empty string, it will not be included in the serialized output.

Here's an example:


public class Person
{
    public string Name { get; set; }
    [JsonProperty("")]
    public string Password { get; set; }
    public string Address { get; set; }
}

var person = new Person
{
    Name = "John Doe",
    Password = "s3cr3t",
    Address = "123 Main St"
};

var json = JsonConvert.SerializeObject(person);

In this example, the `Password` property is renamed to an empty string using the `[JsonProperty("")]` attribute, so it will not be included in the serialized JSON. The `Name` and `Address` properties will still be included in the output.

Using a Custom Contract Resolver

If you need to exclude multiple properties from JSON serialization, you can create a custom contract resolver that excludes specific properties based on their names. A contract resolver is a class that controls how the serialization process works, and it can be used to customize the way that JSON is generated from C# objects.

Here's an example of a custom contract resolver that excludes properties with specific names:

public class ExcludePropertiesContractResolver : DefaultContractResolver 
{
  private readonly string[] _propertyNamesToExclude;
  public ExcludePropertiesContractResolver(
      params string[] propertyNamesToExclude) {
    _propertyNamesToExclude = propertyNamesToExclude;
}

  protected override IList<JsonProperty> CreateProperties(
      Type type, MemberSerialization memberSerialization) 
{
    var properties = base.CreateProperties(type, memberSerialization);

    return properties
        .Where(p => !_propertyNamesToExclude.Contains(p.PropertyName))
        .ToList();
  }
}

var person = new Person { Name = "John Doe", Password = "s3cr3t",
                          Address = "123 Main St" };

var settings = new JsonSerializerSettings {
  ContractResolver = new ExcludePropertiesContractResolver("Password")
};

var json = JsonConvert.SerializeObject(person, settings);

In this example, the `ExcludePropertiesContractResolver` class extends the `DefaultContractResolver` class and overrides the `CreateProperties` method to exclude properties with names that are included in the `_propertyNamesToExclude` array. The `JsonSerializerSettings` class is used to specify the `ExcludePropertiesContractResolver` as the contract resolver to use during serialization.

When the `JsonConvert.SerializeObject` method is called with the `settings` object, the `Password` property is excluded from the serialized output because it is included in the `_propertyNamesToExclude` array.

Conclusion

Excluding properties from JSON serialization in C# is a useful technique when working with JSON data. You can use the `[JsonIgnore]` attribute or the `[JsonProperty]` attribute to exclude individual properties, or you can create a custom contract resolver to exclude multiple properties based on their names.

By understanding these techniques, you can more effectively control the JSON output of your C# applications and APIs.

Pradeep Vaishya<

About author
Hi, I’m Pradeep, specializing in Azure & Microsoft technologies. With a strong background in cloud computing and software development, I've worked extensively on Azure services, leveraging their power to build scalable and efficient solutions. Recently, I've embarked on a new journey of sharing my knowledge through a tech blog, where I delve into the intricacies of Azure and other cutting-edge technologies.
Comments

No comments available.

Leave a Reply