c# 深拷贝

 

/// <summary>
/// 序列化json
/// </summary>
/// <param name="input"></param>
/// <param name="settings"></param>
public static string SerializeJson(this object input, JsonSerializerSettings settings=null)
{
if (input == null)
return null;
try
{
if(settings==null)
return JsonConvert.SerializeObject(input);
return JsonConvert.SerializeObject(input, settings);

}
catch (Exception ex)
{
return null;
}
}
/// <summary>
/// 反序列化json
/// </summary>
/// <param name="input"></param>
public static T DeserializeJson<T>(this string input)
{
if (string.IsNullOrWhiteSpace(input))
return default(T);
try
{
if (string.IsNullOrEmpty(input))
return default(T);
return Newtonsoft.Json.JsonConvert.DeserializeObject<T>(input);
}
catch (Exception ex)
{
return default(T);
}
}

public static T CopyBySerialize<T>(this T obj) where T : class
{
if (obj == null) return default(T);
var input = obj.SerializeJson();
return input.DeserializeJson<T>();
}

 

我还是喜欢通过using Newtonsoft.Json;来进行深浅拷贝

 

通常我们在引用一个引用变量的时候,我们可能会对变量进行修改,但是我们其实并不需要修改其中值,暂时的使用。比如有一个封装很深的变量,我们只想用它的值,然后在某处逻辑判断的时候,修改其值并进行后面的逻辑,然后保存。但是并不希望修改原来的变量,这个时候我们可以考虑使用深拷贝来进行

深拷贝是把它的值和地址复制一份到新的副本中。

 

转载于:https://www.cnblogs.com/CnnBlog/p/11172673.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值