Home > Mobile >  C# Convert object type to specific business type
C# Convert object type to specific business type

Time:12-15

I have a C# object with an Object parameter like this:

public  class Book
{
public object Parameter{get;set;}
}

The Parameter object gets set to an object type of "Author". If you inspect Parameter property, you will see it's of Author type. GetType() will also return Author.

I need to clone Parameter and get a fresh instance of it. So I used this clone extension method:

    public static T Clone<T>(this T source)
    {
        return JsonSerializer.Deserialize<T>(JsonSerializer.Serialize(source));
    }
var newAuthor = _book.Parameter.Clone();

But because the Parameter is of Object, the Clone method returns "JsonElement" for newAuthor. I researched and this is expected for any "Object" type.

My question is -- how do I clone the Parameter object and actually return a new instance of Author object? The object is fairly simply with just properties.

Thanks!

CodePudding user response:

Just add an overload for object:

public static class Extensions
{
    public static T Clone<T>(this T source)
    {
        return JsonSerializer.Deserialize<T>(JsonSerializer.Serialize(source));
    }

    public static object Clone(this object source)
    {
        if (source is null)
            return null;
        return JsonSerializer.Deserialize(JsonSerializer.Serialize(source), source.GetType());
    }
}

This, however, will not handle cloning the Book object, as it will only handle the direct reference passed to it as object, and not embedded properties. You will need to do something else in that case, so this is really not a good way to implement cloning.

  •  Tags:  
  • c#
  • Related