zoukankan      html  css  js  c++  java
  • 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 的简单封装,除了判空以外几乎没有做任何处理。

  • 相关阅读:
    谈谈Oracle基本操作(下)
    谈谈Oracle基本操作(上)
    java理论之java多线程与网络编程
    java理论之java--GUI(图形用户管理)与 IO/流
    java理论之java数组和集合
    存图片的
    .html()渲染后的内容还是带标签的字符串的问题
    Vuejs报错error: Unexpected console statement (no-console) at src... 解决办法
    常用正则表达式
    移动WEB---01.关于屏幕像素
  • 原文地址:https://www.cnblogs.com/fxck/p/13076628.html
Copyright © 2011-2022 走看看