You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
BookingHeChuan/Myshipping.Core/Util/JsonUtil.cs

216 lines
7.0 KiB
C#

This file contains invisible Unicode characters!

This file contains invisible Unicode characters that may be processed differently from what appears below. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to reveal hidden characters.

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text.RegularExpressions;
using Furion.JsonSerialization;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
namespace Myshipping.Core;
/// <summary>
/// Json序列化工具类
/// </summary>
public static class JsonUtil
{
/// <summary>
/// JSON 字符串转 Object
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="json"></param>
/// <returns></returns>
public static T ToObject<T>(this string json)
{
json = json.Replace("&nbsp;", "");
return json == null ? default(T) : JsonConvert.DeserializeObject<T>(json);
}
/// <summary>
/// JSON 字符串转 Object
/// </summary>
/// <param name="Json"></param>
/// <returns></returns>
public static object ToObject(this string Json)
{
return string.IsNullOrEmpty(Json) ? null : JsonConvert.DeserializeObject(Json);
}
/// <summary>
/// Object 转 JSON字符串
/// </summary>
/// <param name="obj"></param>
/// <returns></returns>
public static string ToJsonString(this object obj)
{
return obj == null ? string.Empty : JsonConvert.SerializeObject(obj);
}
/// <summary>
/// JSON 字符串转 JObject
/// </summary>
/// <param name="json"></param>
/// <returns></returns>
public static JObject ToJObject(this string json)
{
return json == null ? JObject.Parse("{}") : JObject.Parse(json.Replace("&nbsp;", ""));
}
/// <summary>
/// Dictionary 字符串转 Object
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="dictionary"></param>
/// <returns></returns>
public static T ToObject<T>(this IDictionary<string, object> dictionary)
{
return dictionary.ToJsonString().ToObject<T>();
}
/// <summary>
/// 把数组转为逗号连接的字符串
/// </summary>
/// <param name="data"></param>
/// <param name="Str"></param>
/// <returns></returns>
public static string ArrayToString(dynamic data, string Str)
{
string resStr = Str;
foreach (var item in data)
{
if (resStr != "")
{
resStr += ",";
}
if (item is string)
{
resStr += item;
}
else
{
resStr += item.ToString();
}
}
return resStr;
}
/// <summary>
/// 判断是否有交集
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="list1"></param>
/// <param name="list2"></param>
/// <returns></returns>
public static bool IsArrayIntersection<T>(List<T> list1, List<T> list2)
{
List<T> t = list1.Distinct().ToList();
var exceptArr = t.Except(list2).ToList();
if (exceptArr.Count < t.Count)
{
return true;
}
else
{
return false;
}
}
/// <summary>
/// 处理输入的数据,变为大写,全角改为半角
/// </summary>
/// <param name="model">数据对象</param>
/// <param name="excepProp">不需要转大写的字段</param>
public static void PropToUpper(object model, params string[] excepProp)
{
var props = model.GetType().GetProperties();
foreach (PropertyInfo prop in props)
{
var propName = prop.Name;
if (excepProp != null && excepProp.Length > 0)
{
if (!excepProp.Contains(propName))
{
if (prop.PropertyType == typeof(string))
{
object sourceVal = prop.GetValue(model);
if (sourceVal != null)
{
prop.SetValue(model, ToDBC(sourceVal.ToString().ToUpper()));
}
}
}
}
}
}
/// <summary>
/// 全角改为半角
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
public static string ToDBC(string input)
{
char[] c = input.ToCharArray();
for (int i = 0; i < c.Length; i++)
{
if (c[i] == 12288)
{
c[i] = (char)32;
continue;
}
if (c[i] > 65280 && c[i] < 65375)
c[i] = (char)(c[i] - 65248);
}
return new string(c);
}
/// <summary>
/// 长TAB键的识别替换空格
/// </summary>
public static bool TrimFields(object model)
{
var props = model.GetType().GetProperties();
foreach (PropertyInfo prop in props)
{
var propName = prop.Name;
if (prop.PropertyType == typeof(string))
{
object sourceVal = prop.GetValue(model);
if (sourceVal != null)
{
prop.SetValue(model, sourceVal.ToString().Replace(" ", " "));
prop.SetValue(model, sourceVal.ToString().Replace(" ", " "));
prop.SetValue(model, sourceVal.ToString().Replace("", ","));
prop.SetValue(model, sourceVal.ToString().Replace("。", "."));
prop.SetValue(model, sourceVal.ToString().Replace("", "?"));
prop.SetValue(model, sourceVal.ToString().Replace("", "!"));
prop.SetValue(model, sourceVal.ToString().Replace("《", "<<"));
prop.SetValue(model, sourceVal.ToString().Replace("》", ">>"));
prop.SetValue(model, sourceVal.ToString().Replace("》", ">>"));
prop.SetValue(model, sourceVal.ToString().Replace("", ";"));
prop.SetValue(model, sourceVal.ToString().Replace("", "'"));
prop.SetValue(model, sourceVal.ToString().Replace("", "'"));
prop.SetValue(model, sourceVal.ToString().Replace("、", ","));
if (Regex.IsMatch(sourceVal.ToString(), @"[\u4e00-\u9fa5]") && (propName.ToUpper() == "MBLNO" || propName.ToUpper() == "HBLNO" || propName.ToUpper() == "VESSEL" || propName.ToUpper() == "VOYNO"
|| propName.ToUpper() == "VOYNOINNER" || propName.ToUpper() == "PLACERECEIPT" || propName.ToUpper() == "PORTLOAD" || propName.ToUpper() == "PORTDISCHARGE"
|| propName.ToUpper() == "PLACEDELIVERY" || propName.ToUpper() == "DESTINATION" || propName.ToUpper() == "MARKS" || propName.ToUpper() == "HSCODE"
|| propName.ToUpper() == "DESCRIPTION" || propName.ToUpper() == "SHIPPERID" || propName.ToUpper() == "CONSIGNEEID" || propName.ToUpper() == "NOTIFYPARTYID"
|| propName.ToUpper() == "YARDID" || propName.ToUpper() == "VESSELID"))
{
return false;
}
}
}
}
return true;
}
}