https://github.com/ignatandrei/rscg_interface_to_null_object
Implementation of https://en.wikipedia.org/wiki/Null_object_pattern from interface
https://github.com/ignatandrei/rscg_interface_to_null_object
Last synced: 4 months ago
JSON representation
Implementation of https://en.wikipedia.org/wiki/Null_object_pattern from interface
- Host: GitHub
- URL: https://github.com/ignatandrei/rscg_interface_to_null_object
- Owner: ignatandrei
- License: mit
- Created: 2025-01-18T14:26:03.000Z (over 1 year ago)
- Default Branch: main
- Last Pushed: 2025-05-19T19:29:25.000Z (about 1 year ago)
- Last Synced: 2026-02-11T12:36:53.070Z (5 months ago)
- Language: C#
- Size: 92.8 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
[](https://www.nuget.org/packages/rscg_Interface_to_null_object)
[](https://www.nuget.org/packages/rscg_Interface_to_null_object_common)
# Interface to Null Object Pattern
Implementation of https://en.wikipedia.org/wiki/Null_object_pattern from interface
# Installation
Add to your csproj file:
```xml
true
$(BaseIntermediateOutputPath)\GX
```
Or add the nuget packages rscg_Interface_to_null_object and rscg_Interface_to_null_object_common
# Usage
## Simple usage
```csharp
[InterfaceToNullObject.ToNullObject]
public interface IEmployee
{
public string FirstName { get; set; }
public string LastName { get; set; }
public IDepartment Department { get; set; }
public string GetFullName();
}
```
And then a C# class that implements the interface will be generated
```csharp
public partial class Employee_null : global::IntegrationConsole.IEmployee
{
public virtual string FirstName { get; set; } = default(string);
public virtual string LastName { get; set; } = default(string);
public virtual IntegrationConsole.IDepartment Department { get; set; } = default(IntegrationConsole.IDepartment);
public virtual string GetFullName() { return default(string); }
}
```
## Deserialize to interface
See following code that deserializes to interface with a converter that is automatically generated
```csharp
//serialize and deserialize
var empString = JsonSerializer.Serialize(employee);
Console.WriteLine(empString);
//deserialize
var options = new JsonSerializerOptions
{
PropertyNameCaseInsensitive = true,
DefaultBufferSize = 128
};
options.Converters.Add(new IDepartmentConverter());
options.Converters.Add(new IEmployeeConverter());
var emp2 = JsonSerializer.Deserialize(empString,options);
ArgumentNullException.ThrowIfNull(emp2);
Console.WriteLine(emp2.FirstName);
Console.WriteLine(emp2.Department.Name);
Debug.Assert(emp2.FirstName == "Andrei");
```
## Adding default values
Let's say you want to return an empty string for the GetFullName method, you can add the following code to your csproj file
```xml
return ""
```
So now the code will be generated like this
```csharp
public virtual string GetFullName() { return "" ; }
```
For array and generics, see
```xml
return ""
return []
return AsyncEnumerable.Empty_Of_IntegrationConsole.IEmployee_EndOf();
```