• ABP JsonExtensions 内部实现源码


    调用方式:

    str.FromJsonString<List<Guid>>();//字符串转集合
    list.ToJsonString();//集合转字符串
    using JetBrains.Annotations;
    using Newtonsoft.Json;
    using System;
    
    namespace Abp.Json
    {
        public static class JsonExtensions
        {
            /// <summary>
            /// Converts given object to JSON string.
            /// </summary>
            /// <returns></returns>
            public static string ToJsonString(this object obj, bool camelCase = false, bool indented = false)
            {
                var settings = new JsonSerializerSettings();
    
                if (camelCase)
                {
                    settings.ContractResolver = new AbpCamelCasePropertyNamesContractResolver();
                }
                else
                {
                    settings.ContractResolver = new AbpContractResolver();
                }
    
                if (indented)
                {
                    settings.Formatting = Formatting.Indented;
                }
                
                return ToJsonString(obj, settings);
            }
    
            /// <summary>
            /// Converts given object to JSON string using custom <see cref="JsonSerializerSettings"/>.
            /// </summary>
            /// <returns></returns>
            public static string ToJsonString(this object obj, JsonSerializerSettings settings)
            {
                return obj != null
                    ? JsonConvert.SerializeObject(obj, settings)
                    : default(string);
            }
    
            /// <summary>
            /// Returns deserialized string using default <see cref="JsonSerializerSettings"/>
            /// </summary>
            /// <typeparam name="T"></typeparam>
            /// <param name="value"></param>
            /// <returns></returns>
            public static T FromJsonString<T>(this string value)
            {
                return value.FromJsonString<T>(new JsonSerializerSettings());
            }
    
            /// <summary>
            /// Returns deserialized string using custom <see cref="JsonSerializerSettings"/>
            /// </summary>
            /// <typeparam name="T"></typeparam>
            /// <param name="value"></param>
            /// <param name="settings"></param>
            /// <returns></returns>
            public static T FromJsonString<T>(this string value, JsonSerializerSettings settings)
            {
                return value != null
                    ? JsonConvert.DeserializeObject<T>(value, settings)
                    : default(T);
            }
    
            /// <summary>
            /// Returns deserialized string using explicit <see cref="Type"/> and custom <see cref="JsonSerializerSettings"/>
            /// </summary>
            /// <param name="value"></param>
            /// <param name="type"></param>
            /// <param name="settings"></param>
            /// <returns></returns>
            public static object FromJsonString(this string value, [NotNull] Type type, JsonSerializerSettings settings)
            {
                if (type == null)
                {
                    throw new ArgumentNullException(nameof(type));
                }
    
                return value != null
                    ? JsonConvert.DeserializeObject(value, type, settings)
                    : null;
            }
        }
    }

    可以看到内部实现就是对 Newtonsoft.Json 的简单封装,除了判空以外几乎没有做任何处理。

  • 相关阅读:
    mat工具记录一次full gc的过程
    2021年官网下载各个版本JDK最全版与官网查阅方法
    如何用vmkping命令调试vsphere环境中的VMkernel网络连接(ISCSI 开启巨帧)
    vsphere 虚拟机的迁移,冷迁移,vmotion(热迁移)
    VMkernel 级别的 TCP/IP 堆栈解释
    Ubuntu/Linux 开机运行指定的命令/自动运行命令
    桌面信息软件Desktop Info配置
    Windows10下插入USB串口设备后鼠标跳屏问题——Microsoft Serial Ballpoint
    Windows桌面配置常用软件总结
    安装Linux双系统取消快速启动,为什么在双启动时禁用Windows 8上的快速启动?
  • 原文地址:https://www.cnblogs.com/fxck/p/13076628.html
Copyright © 2020-2023  润新知