irc-netcore-api/IRaCIS.Core.Infrastructure/Extention/CloneExtension.cs

23 lines
699 B
C#

using Newtonsoft.Json;
using System;
namespace IRaCIS.Core.Infrastructure.Extention
{
public static class CloneExtension
{
public static T Clone<T>(this T source)
{
// Don't serialize a null object, simply return the default for that object
if (Object.ReferenceEquals(source, null))
{
return default(T);
}
var deserializeSettings = new JsonSerializerSettings { ObjectCreationHandling = ObjectCreationHandling.Replace };
var serializeSettings = new JsonSerializerSettings { ReferenceLoopHandling = ReferenceLoopHandling.Ignore };
return JsonConvert.DeserializeObject<T>(JsonConvert.SerializeObject(source, serializeSettings), deserializeSettings);
}
}
}