zoukankan      html  css  js  c++  java
  • 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;来进行深浅拷贝

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

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

  • 相关阅读:
    learning scala view collection
    scala
    learning scala dependency injection
    learning scala implicit class
    learning scala type alise
    learning scala PartialFunction
    learning scala Function Recursive Tail Call
    learning scala Function Composition andThen
    System.Threading.Interlocked.CompareChange使用
    System.Threading.Monitor的使用
  • 原文地址:https://www.cnblogs.com/CnnBlog/p/11172673.html
Copyright © 2011-2022 走看看