It will be interesting to see the Null Object in the debugger with properties generated from interface -see https://www.nuget.org/packages/rscg_Interface_to_null_object
This is not very difficult to generate once you have the interface with properties
The code for generating
public string DebuggerDisplay()
{
StringBuilder sb = new StringBuilder("[System.Diagnostics.DebuggerDisplay(");
sb.Append("\"");
foreach (var item in props)
{
sb.Append(item.Name);
sb.Append(" = {");
sb.Append(item.Name);
sb.Append("} " );
}
sb.Append("\")]");
return sb.ToString();
}
and the code generated is
[System.Diagnostics.DebuggerDisplay("FirstName = {FirstName} LastName = {LastName} Department = {Department} ")]
public partial class Employee_null : global::IntegrationConsole.IEmployee
More interesting is to have a converter in order to obtain from the JSON string the interface,not the object .
The code for generating is
public class @(Model.Name + "Converter") : System.Text.Json.Serialization.JsonConverter<@(Model.FullName)>
{
public override @Model.FullName Read(ref System.Text.Json.Utf8JsonReader reader,System.Type typeToConvert,System.Text.Json.JsonSerializerOptions options)
{
// Deserialize the JSON to the concrete type @Model.Name
return System.Text.Json.JsonSerializer.Deserialize<@nameClass>
(ref reader,options);
}
public override void Write(System.Text.Json.Utf8JsonWriter writer,@Model.FullName value,System.Text.Json.JsonSerializerOptions options)
{
// Serialize the concrete type @Model.Name
System.Text.Json.JsonSerializer.Serialize(writer,(@nameClass)value,options);
}
}
and the code generated is
//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<IEmployee>(empString,options);
ArgumentNullException.ThrowIfNull(emp2);
Console.WriteLine(emp2.FirstName);
Console.WriteLine(emp2.Department.Name);
Debug.Assert(emp2.FirstName == "Andrei");
Leave a Reply