• Newtonsoft.Json.JsonHelper 父子结构数据改成数据平铺


    using Newtonsoft.Json;
    using Newtonsoft.Json.Linq;
    using System.Collections.Generic;
    
    namespace BLL.Utilities
    {
        public class JsonHelper
        {
            public static string SerializeAndFlatten(string prefix, object obj)
            {
                Dictionary<string, object> dict = new Dictionary<string, object>();
                var json = JsonConvert.SerializeObject(obj);
                JToken token = JToken.Parse(json);
                FillDictionaryFromJToken(dict, token, prefix);
                return JsonConvert.SerializeObject(dict);
            }
    
            private static void FillDictionaryFromJToken(Dictionary<string, object> dict, JToken token, string prefix)
            {
                switch (token.Type)
                {
                    case JTokenType.Object:
                        foreach (JProperty prop in token.Children<JProperty>())
                        {
                            FillDictionaryFromJToken(dict, prop.Value, Join(prefix, prop.Name));
                        }
                        break;
    
                    case JTokenType.Array:
                        int index = 0;
                        foreach (JToken value in token.Children())
                        {
                            FillDictionaryFromJToken(dict, value, string.Join("", prefix, index));
                            index++;
                        }
                        break;
    
                    default:
                        dict.Add(prefix, ((JValue)token).Value);
                        break;
                }
            }
    
            private static string Join(string prefix, string name)
            {
                return (string.IsNullOrEmpty(prefix) ? name : string.Join("_", prefix, name));
            }
        }
    }

    调用

    var result = JsonHelper.SerializeAndFlatten(string.Empty, new { Result = QueryStatus.Success.ToString(), ErrorCode = string.Empty, ErrorMessage = string.Empty, CustomerIndicator = indicator, QueryResult = new QueryResult() });

    父子结构属性

        public class QueryResult
        {
            [JsonIgnore]
            public DateTime CreatedTime { get; set; }
    
            [JsonProperty("reportHeader")]
            public virtual ReportHeader ReportHeader { get; set; }
    
            [JsonProperty("personalProfile")]
            public virtual PersonalProfile PersonalProfile { get; set; }
    
            [JsonProperty("homeInfo")]
            public virtual List<HomeInfo> HomeInfo { get; set; }
    
            [JsonProperty("workInfo")]
            public virtual List<WorkInfo> WorkInfo { get; set; }
    
            [JsonProperty("nonRevolvingLoan")]
            public virtual NonRevolvingLoan NonRevolvingLoan { get; set; }
    
            [JsonProperty("revolvingLoan")]
            public virtual RevolvingLoan RevolvingLoan { get; set; }
    
            [JsonProperty("queryHistory")]
            public virtual List<QueryHistory> QueryHistory { get; set; }
        }
        public class ReportHeader
        {
            [ForeignKey("BhQueryResult")]
            [JsonIgnore]
            public long ReportHeaderId { get; set; }
    
            [JsonProperty("reportId")]
            [MaxLength(30)]
            public string ReportId { get; set; }
    
            [JsonProperty("reportTime")]
            public DateTime ReportTime { get; set; }
    
            [JsonProperty("queryResult")]
            public int QueryResult { get; set; }
        }
    
    
        public class PersonalProfile
        {
            [ForeignKey("BhQueryResult")]
            [JsonIgnore]
            public long PersonalProfileId { get; set; }
    
            [JsonProperty("name")]
            [MaxLength(30)]
            public string Name { get; set; }
    
            [JsonProperty("pid")]
            [MaxLength(20)]
            public string Pid { get; set; }
    
            [JsonProperty("mobileCount")]
            public int MobileCount { get; set; }
        }
    
    
        public class HomeInfo
        {
            [JsonIgnore]
            public long HomeInfoId { get; set; }
    
            [JsonProperty("homeAddress")]
            [MaxLength(200)]
            public string HomeAddress { get; set; }
    
            [JsonProperty("date")]
            public DateTime Date { get; set; }
        }
    
        public class WorkInfo
        {
            [JsonIgnore]
            public long WorkInfoId { get; set; }
    
            [JsonProperty("workName")]
            [MaxLength(100)]
            public string WorkName { get; set; }
    
            [JsonProperty("workAddress")]
            [MaxLength(200)]
            public string WorkAddress { get; set; }
    
            [JsonProperty("date")]
            public DateTime Date { get; set; }
        }
    
    
        public class NonRevolvingLoan
        {
            [ForeignKey("BhQueryResult")]
            [JsonIgnore]
            public long NonRevolvingLoanId { get; set; }
    
            [JsonProperty("summary")]
            public virtual NonRevolvingLoanSummary Summary { get; set; }
    
            [JsonProperty("D30")]
            public virtual NonRevolvingLoanDetail D30 { get; set; }
    
            [JsonProperty("D90")]
            public virtual NonRevolvingLoanDetail D90 { get; set; }
    
            [JsonProperty("D180")]
            public virtual NonRevolvingLoanDetail D180 { get; set; }
    
            [JsonProperty("D360")]
            public virtual NonRevolvingLoanDetail D360 { get; set; }
        }
    
    
        public class RevolvingLoan
        {
            [ForeignKey("BhQueryResult")]
            [JsonIgnore]
            public long RevolvingLoanId { get; set; }
    
            [JsonProperty("summary")]
            public virtual RevolvingLoanSummary Summary { get; set; }
    
            [JsonProperty("D30")]
            public virtual RevolvingLoanDetail D30 { get; set; }
    
            [JsonProperty("D90")]
            public virtual RevolvingLoanDetail D90 { get; set; }
    
            [JsonProperty("D180")]
            public virtual RevolvingLoanDetail D180 { get; set; }
    
            [JsonProperty("D360")]
            public virtual RevolvingLoanDetail D360 { get; set; }
        }
    
    
        public class QueryHistory
        {
            [Key]
            [JsonIgnore]
            public long QueryHistoryId { get; set; }
    
            [JsonProperty("tenantType")]
            [MaxLength(30)]
            public string TenantType { get; set; }
    
            [JsonProperty("tenantName")]
            [MaxLength(50)]
            public string TenantName { get; set; }
    
            [JsonProperty("userId")]
            [MaxLength(30)]
            public string UserId { get; set; }
    
            [JsonProperty("date")]
            public DateTime Date { get; set; }
    
            [JsonProperty("reason")]
            public int Reason { get; set; }
        }

    Json data

    {
        "Data": {
            "reportHeader": {
                "reportId": "CS1909291422585066440189",
                "reportTime": "2019-09-29T14:22:58",
                "queryResult": 1
            },
            "personalProfile": {
                "name": "霍测试",
                "pid": "111111198988888888",
                "mobileCount": 1
            },
            "homeInfo": [
                {
                    "homeAddress": "联调市测试县**********",
                    "date": "2019-08-16T00:00:00"
                },
                {
                    "homeAddress": "联调市测试县**********",
                    "date": "2019-08-16T00:00:00"
                }
            ],
            "workInfo": [],
            "nonRevolvingLoan": {
                "summary": {
                    "loanCount": 1,
                    "openLoanCount": 1,
                    "remainingAmount": 53000.0,
                    "remainingOverdueLoanCount": 0,
                    "remainingOverdueAmount": 0.0,
                    "remainingMaxOverdueStatus": "N",
                    "overdueCount": 0,
                    "maxOverdueStatus": "N",
                    "lastCompensationDate": null
                },
                "D30": {
                    "applyTenantCount": -1,
                    "loanCount": 0,
                    "loanAmount": 0.0,
                    "loanTenantCount": 0,
                    "maxLoanAmount": 0.0,
                    "averageLoanAmount": 0.0,
                    "overdueLoanCount": 0,
                    "compensationAmount": 0.0,
                    "compensationCount": 0.0,
                    "compensationTimes": 0.0
                },
                "D90": {
                    "applyTenantCount": -1,
                    "loanCount": 1,
                    "loanAmount": 53000.0,
                    "loanTenantCount": 1,
                    "maxLoanAmount": 53000.0,
                    "averageLoanAmount": 53000.0,
                    "overdueLoanCount": 0,
                    "compensationAmount": 0.0,
                    "compensationCount": 0.0,
                    "compensationTimes": 0.0
                },
                "D180": {
                    "applyTenantCount": -1,
                    "loanCount": 1,
                    "loanAmount": 53000.0,
                    "loanTenantCount": 1,
                    "maxLoanAmount": 53000.0,
                    "averageLoanAmount": 53000.0,
                    "overdueLoanCount": 0,
                    "compensationAmount": 0.0,
                    "compensationCount": 0.0,
                    "compensationTimes": 0.0
                },
                "D360": {
                    "applyTenantCount": -1,
                    "loanCount": 1,
                    "loanAmount": 53000.0,
                    "loanTenantCount": 1,
                    "maxLoanAmount": 53000.0,
                    "averageLoanAmount": 53000.0,
                    "overdueLoanCount": 0,
                    "compensationAmount": 0.0,
                    "compensationCount": 0.0,
                    "compensationTimes": 0.0
                }
            },
            "revolvingLoan": {
                "summary": {
                    "accountCount": 0,
                    "validAccountCount": 0,
                    "creditLimitSum": 0.0,
                    "maxCreditLimitPerTenant": 0.0,
                    "remainingAmount": 0.0,
                    "remainingOverdueAccountCount": 0,
                    "remainingOverdueAmount": 0.0,
                    "remainingMaxOverdueStatus": "N",
                    "overdueCount": 0,
                    "maxOverdueStatus": "N",
                    "revolvingLastCompensationDate": null
                },
                "D30": {
                    "applyTenantCount": -1,
                    "accountCount": 0,
                    "creditLimitSum": 0.0,
                    "lendingAmount": 0.0,
                    "overdueAccountCount": 0,
                    "revolvingCompensationAmount": 0.0,
                    "revolvingCompensationTimes": 0.0,
                    "revolvingCompensationCount": 0.0
                },
                "D90": {
                    "applyTenantCount": -1,
                    "accountCount": 0,
                    "creditLimitSum": 0.0,
                    "lendingAmount": 0.0,
                    "overdueAccountCount": 0,
                    "revolvingCompensationAmount": 0.0,
                    "revolvingCompensationTimes": 0.0,
                    "revolvingCompensationCount": 0.0
                },
                "D180": {
                    "applyTenantCount": -1,
                    "accountCount": 0,
                    "creditLimitSum": 0.0,
                    "lendingAmount": 0.0,
                    "overdueAccountCount": 0,
                    "revolvingCompensationAmount": 0.0,
                    "revolvingCompensationTimes": 0.0,
                    "revolvingCompensationCount": 0.0
                },
                "D360": {
                    "applyTenantCount": -1,
                    "accountCount": 0,
                    "creditLimitSum": 0.0,
                    "lendingAmount": 0.0,
                    "overdueAccountCount": 0,
                    "revolvingCompensationAmount": 0.0,
                    "revolvingCompensationTimes": 0.0,
                    "revolvingCompensationCount": 0.0
                }
            },
            "queryHistory": [
                {
                    "tenantType": "-",
                    "tenantName": "联调测试(天津)有限公司",
                    "userId": "DZQCJRZL_TEST_1",
                    "date": "2019-09-29T00:00:00",
                    "reason": 1
                },
                {
                    "tenantType": "-",
                    "tenantName": "联调测试(天津)有限公司",
                    "userId": "DZQCJRZL_TEST_1",
                    "date": "2019-09-29T00:00:00",
                    "reason": 1
                },
                {
                    "tenantType": "-",
                    "tenantName": "联调测试(天津)有限公司",
                    "userId": "DZQCJRZL_TEST_1",
                    "date": "2019-09-29T00:00:00",
                    "reason": 1
                },
                {
                    "tenantType": "-",
                    "tenantName": "联调测试(天津)有限公司",
                    "userId": "DZQCJRZL_TEST_1",
                    "date": "2019-09-29T00:00:00",
                    "reason": 1
                },
                {
                    "tenantType": "-",
                    "tenantName": "联调测试(天津)有限公司",
                    "userId": "DZQCJRZL_TEST_1",
                    "date": "2019-09-29T00:00:00",
                    "reason": 1
                },
                {
                    "tenantType": "-",
                    "tenantName": "联调测试(天津)有限公司",
                    "userId": "DZQCJRZL_TEST_1",
                    "date": "2019-09-25T00:00:00",
                    "reason": 6
                },
                {
                    "tenantType": "-",
                    "tenantName": "联调测试(天津)有限公司",
                    "userId": "DZQCJRZL_TEST_1",
                    "date": "2019-09-25T00:00:00",
                    "reason": 1
                }
            ]
        },
        "StatusCode": "200",
        "StatusMessage": "Successful",
        "Success": true
    }
  • 相关阅读:
    C#的System.Diagnostics.Trace.WriteLine 写入到文件中案例
    ubuntu开放指定端口
    mysql 启报错报 The server quit without updating PID file
    【WebMisCentral WMC】基于Extjs 4.2x的企业级用户授权认证中心系统(SSO+AM+SM),多租户SAAS应用
    Ajaxupload.js在最新版chrome 83版浏览器oncomplete失效问题解决方法
    SQLServer 父子结构group汇总显示
    jqweui 关于$(document.body).infinite的bug
    EntityFramework 动态构造排序 Func<IQueryable<T>, IOrderedQueryable<T>> Dynamic
    Safari 3D transform变换z-index层级渲染异常的研究
    Asp.net Core中使用NLog,并封装成公共的日志方法
  • 原文地址:https://www.cnblogs.com/hofmann/p/15714413.html
Copyright © 2020-2023  润新知