PTrampert.SimplePatch 1.1.12

dotnet add package PTrampert.SimplePatch --version 1.1.12
                    
NuGet\Install-Package PTrampert.SimplePatch -Version 1.1.12
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="PTrampert.SimplePatch" Version="1.1.12" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="PTrampert.SimplePatch" Version="1.1.12" />
                    
Directory.Packages.props
<PackageReference Include="PTrampert.SimplePatch" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add PTrampert.SimplePatch --version 1.1.12
                    
#r "nuget: PTrampert.SimplePatch, 1.1.12"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package PTrampert.SimplePatch@1.1.12
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=PTrampert.SimplePatch&version=1.1.12
                    
Install as a Cake Addin
#tool nuget:?package=PTrampert.SimplePatch&version=1.1.12
                    
Install as a Cake Tool

PTrampert.SimplePatch

Library supporting simple patch objects in .NET.

Overview

PTrampert.SimplePatch is a C# library designed to facilitate the handling of flat PATCH objects in .NET web applications. With this library, you can easily distinguish between properties that are omitted from a PATCH request and those explicitly set to null or a value.

This is especially useful when you want to update only specific properties of an object, leaving others unchanged. For example, if you send a PATCH request like:

{
  "name": "New Name"
}

and your object contains additional properties besides name, PTrampert.SimplePatch makes it easy to ensure that only name is updated, and all other properties remain untouched.

Features

  • Supports "Optional" types for PATCH operations.
  • Dynamically generates implementations of IPatchObject for your write models.
  • Preserves validation attributes on properties, allowing for validation of PATCH requests.
  • Handles complex types with custom JSON converters.

Getting Started

A full sample project is available in the PTrampert.SimplePatch.Samples

  • Install the library via NuGet:
dotnet add package PTrampert.SimplePatch
  • Create your write model class
public record PersonWriteModel
{
    // For PATCH requests, Required will only be enforced if the property is present in the request body.
    [Required]
    [StringLength(255, MinimumLength = 3)]
    public required string Name { get; init; }
    
    public DateTime DateOfBirth { get; init; }
    
    // Validation attributes can be used to enforce rules on the email field.
    [EmailAddress]
    public string? Email { get; init; }
    
    // Using a custom JSON converter to handle phone number serialization and deserialization
    [JsonConverter(typeof(PhoneNumberJsonConverter))]
    public PhoneNumber? PhoneNumber { get; init; }
}
  • Use IPatchObjectFor<PersonWriteModel> to create an optional object for PATCH operations:
    [HttpPatch("{id:int}")]
    public ActionResult<PersonReadModel> PatchPerson(
        int id,
        // PTrampert.SimplePatch automatically generates an implementation of IPatchObjectFor<PersonWriteModel>
        [FromBody] IPatchObjectFor<PersonWriteModel> patchObject)
    {
        // Validation is preserved on the patch object, so we can check ModelState
        if (!ModelState.IsValid)
            return BadRequest(ModelState);
        
        var existingPerson = _db.GetPersonById(id);
        if (existingPerson == null)
            return NotFound();
        
        var patchedPerson = patchObject.Patch(existingPerson);
        var updatedPerson = _db.UpdatePerson(id, patchedPerson);
        
        return updatedPerson!;
    }

This will allow you to make the following HTTP request to update only the specified properties of Person (in this example, only the 'name' property).

PATCH /person/1 HTTP/1.1
Content-Type: application/json
Content-Length: 24

{
  "name": "New Name"
}
Product Compatible and additional computed target framework versions.
.NET net8.0 is compatible.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed.  net9.0 was computed.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed.  net10.0 was computed.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
1.1.12 96 1/10/2026
1.1.11 89 1/10/2026
1.1.10 86 1/6/2026
1.1.9 187 11/27/2025
1.1.8 219 11/14/2025
1.1.7 144 10/31/2025
1.1.6 192 10/13/2025
1.1.5 194 10/9/2025
1.1.4 186 10/9/2025
1.1.3 208 10/9/2025
1.1.2 189 10/3/2025
1.1.1 185 10/2/2025
1.1.0 190 10/2/2025
1.0.5 176 10/2/2025
1.0.4 324 9/19/2025
1.0.3 325 9/18/2025
1.0.2 203 9/11/2025
1.0.1 159 9/6/2025
1.0.0 184 8/13/2025