A Guide to Customizing Property Names in Serialization with Json.NET

Nov 19, 2025 · Programming · 16 views · 7.8

Keywords: Json.NET | Serialization | Property Name Customization

Abstract: This article provides a comprehensive guide on customizing property names during JSON serialization using Json.NET in C#. By leveraging the JsonPropertyAttribute, developers can map class properties to different JSON field names, enhancing code clarity and maintainability. Through practical code examples, the article illustrates basic usage and discusses best practices, offering deep insights into Json.NET's serialization mechanisms.

Introduction

JSON serialization is a common requirement in modern software development for data exchange. Json.NET (Newtonsoft.Json), a widely used library in the .NET ecosystem, offers flexible control over serialization. This article focuses on how to customize property names using the JsonPropertyAttribute to address mapping issues in real-world development.

Basic Usage of JsonPropertyAttribute

The JsonPropertyAttribute in Json.NET allows developers to specify custom JSON field names for class properties. For instance, consider a C# class with a property named Foo that should appear as bar in the serialized JSON. This can be achieved with the following code:

using Newtonsoft.Json;

public class ExampleClass
{
    [JsonProperty(PropertyName = "bar")]
    public string Foo { get; set; }
}

In this example, the Foo property is annotated with JsonProperty, setting PropertyName to "bar". When serializing an instance using JsonConvert.SerializeObject, the output JSON will include the bar field instead of Foo. For example, serializing an ExampleClass instance might produce: {"bar": "some value"}.

In-Depth Analysis of the Serialization Process

During serialization, Json.NET inspects the custom attributes of properties. If JsonPropertyAttribute is present, it uses the PropertyName value as the JSON field name; otherwise, it defaults to the property's original name. This mechanism ensures backward compatibility while allowing flexible renaming. For instance, in scenarios like data migration or API version updates, field names can be adjusted seamlessly without impacting existing code.

Additionally, JsonPropertyAttribute supports other parameters, such as NullValueHandling and DefaultValueHandling, for controlling the serialization of null values and defaults. However, this article concentrates on property name customization; other features can be explored in the official documentation.

Practical Applications and Code Examples

Consider a real-world scenario: querying data from a database and serializing it to JSON, where database field names differ from those expected by a front-end API. Suppose a User class has a UserName property that should map to username in JSON:

public class User
{
    [JsonProperty(PropertyName = "username")]
    public string UserName { get; set; }
    
    public int Age { get; set; }
}

// Serialization example
User user = new User { UserName = "Alice", Age = 30 };
string json = JsonConvert.SerializeObject(user);
// Output: {"username": "Alice", "Age": 30}

This code demonstrates applying custom names only to specific properties, while others (e.g., Age) remain unchanged. This approach is particularly useful in maintaining large codebases, enabling incremental adjustments to field names without rewriting the entire serialization logic.

Comparison with System.Text.Json

As a supplementary note, .NET Core introduced the System.Text.Json library, which uses JsonPropertyNameAttribute for similar functionality. For example:

using System.Text.Json.Serialization;

public class User
{
    [JsonPropertyName("username")]
    public string UserName { get; set; }
}

Although the syntax is similar, Json.NET is more mature in terms of features and community support, while System.Text.Json offers better performance. Developers should choose the appropriate library based on project requirements.

Best Practices and Considerations

When using JsonPropertyAttribute, it is advisable to:

Furthermore, note that JsonPropertyAttribute only affects serialization output and does not alter internal property access. During deserialization, Json.NET matches JSON fields to properties based on PropertyName, so ensure custom names are unique and unambiguous.

Conclusion

Through JsonPropertyAttribute, Json.NET provides robust and flexible capabilities for customizing property names. This article, with its examples and analysis, helps readers grasp the core usage and compares related technologies. In practice, judicious use of this feature can enhance code readability and cross-system compatibility. For advanced features like custom converters and naming policies, further exploration can extend serialization control.

Copyright Notice: All rights in this article are reserved by the operators of DevGex. Reasonable sharing and citation are welcome; any reproduction, excerpting, or re-publication without prior permission is prohibited.