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 的简单封装,除了判空以外几乎没有做任何处理。

  • 相关阅读:
    OpenSSL SSL_connect: Connection was reset in connection to github.com:443 git访问不到
    vue 阻止页面跳转 , 询问是否离开页面 , 确定后离开, 禁用浏览器返回功能
    SpringBoot: No active profile set, falling back to default profiles: default , 不一定是依赖的问题
    intellij . 关闭重复波浪线提示 (IDEA)
    编码
    git搭建个人仓库
    请求路径中添加版本号
    java调用maven
    迁移学习
    Promise实现
  • 原文地址:https://www.cnblogs.com/fxck/p/13076628.html
Copyright © 2011-2022 走看看