2016-11-30 11 views
1

Я использую веб-API, который возвращает JSON. Внутри этого JSON имеется строка JSON с кодировкой base64, которая возвращается.Вложенная десериализация JSON в C# SSIS

Первоначальный ответ возвращает JSON, который использует следующие классы.

public class Attachment 
{ 
    public string type { get; set; } 
    public string name { get; set; } 
    public string contentType { get; set; } 
    public string content { get; set; } 
} 

public class Response 
{ 
    public int postVersion { get; set; } 
    public int appId { get; set; } 
    public string appReference { get; set; } 
    public string createDate { get; set; } 
    public string clientName { get; set; } 
    public string storeName { get; set; } 
    public List<Attachment> attachments { get; set; } 
} 

public class RootObject 
{ 
    public bool Success { get; set; } 
    public Response Response { get; set; } 
} 

«Содержание» в классе Attachment возвращается в кодировке base64 JSON строку.

После декодируется Жало JSON использует следующие классы (это был сгенерирован из json2csharp.com)

public class Salary 
{ 
    public int AccountID { get; set; } 
    public string H1 { get; set; } 
    public string H2 { get; set; } 
    public string H3 { get; set; } 
    public string SH1 { get; set; } 
    public string Description { get; set; } 
    public object Count { get; set; } 
    public object FrequencyDescription { get; set; } 
    public object FrequencyDuration { get; set; } 
    public object FrequencyDurationDate { get; set; } 
    public object FrequencyWeekday { get; set; } 
    public object FrequencyAmount { get; set; } 
    public object FrequencyAmountRange { get; set; } 
    public object TotalAmount { get; set; } 
    public object TotalInAmount { get; set; } 
    public object TotalOutAmount { get; set; } 
    public object MonthlyAmount { get; set; } 
    public object GroupID { get; set; } 
    public object Display { get; set; } 
    public object FrequencyExactness { get; set; } 
    public object FrequencyPeriod { get; set; } 
    public object ScoreEmployer { get; set; } 
    public object ScoreDirCr { get; set; } 
    public object ScoreWeekday { get; set; } 
    public object ScoreFrequency { get; set; } 
    public object ScoreAmount { get; set; } 
    public object ScoreTotal { get; set; } 
} 

public class Benefit 
{ 
    public int AccountID { get; set; } 
    public string H1 { get; set; } 
    public string H2 { get; set; } 
    public string H3 { get; set; } 
    public string SH1 { get; set; } 
    public string Description { get; set; } 
    public object Count { get; set; } 
    public object FrequencyDescription { get; set; } 
    public object FrequencyDuration { get; set; } 
    public object FrequencyDurationDate { get; set; } 
    public object FrequencyWeekday { get; set; } 
    public object FrequencyAmount { get; set; } 
    public object FrequencyAmountRange { get; set; } 
    public object TotalAmount { get; set; } 
    public object TotalInAmount { get; set; } 
    public object TotalOutAmount { get; set; } 
    public object MonthlyAmount { get; set; } 
    public object GroupID { get; set; } 
    public object Display { get; set; } 
    public object FrequencyExactness { get; set; } 
    public object FrequencyPeriod { get; set; } 
    public object ScoreEmployer { get; set; } 
    public object ScoreDirCr { get; set; } 
    public object ScoreWeekday { get; set; } 
    public object ScoreFrequency { get; set; } 
    public object ScoreAmount { get; set; } 
    public object ScoreTotal { get; set; } 
} 

public class OtherIncome 
{ 
    public int AccountID { get; set; } 
    public string H1 { get; set; } 
    public string H2 { get; set; } 
    public string H3 { get; set; } 
    public string SH1 { get; set; } 
    public string Description { get; set; } 
    public int Count { get; set; } 
    public string FrequencyDescription { get; set; } 
    public string FrequencyDuration { get; set; } 
    public string FrequencyDurationDate { get; set; } 
    public string FrequencyWeekday { get; set; } 
    public double FrequencyAmount { get; set; } 
    public string FrequencyAmountRange { get; set; } 
    public double TotalAmount { get; set; } 
    public double TotalInAmount { get; set; } 
    public int TotalOutAmount { get; set; } 
    public int MonthlyAmount { get; set; } 
    public string GroupID { get; set; } 
    public string Display { get; set; } 
    public string FrequencyExactness { get; set; } 
    public string FrequencyPeriod { get; set; } 
    public object ScoreEmployer { get; set; } 
    public object ScoreDirCr { get; set; } 
    public object ScoreWeekday { get; set; } 
    public object ScoreFrequency { get; set; } 
    public object ScoreAmount { get; set; } 
    public int ScoreTotal { get; set; } 
} 

public class Income 
{ 
    public List<Salary> Salary { get; set; } 
    public List<Benefit> Benefits { get; set; } 
    public List<OtherIncome> __invalid_name__Other Income { get; set; } 
} 

public class SmallAmountLoan 
{ 
    public int AccountID { get; set; } 
    public string H1 { get; set; } 
    public string H2 { get; set; } 
    public string H3 { get; set; } 
    public string SH1 { get; set; } 
    public string Description { get; set; } 
    public int? Count { get; set; } 
    public string FrequencyDescription { get; set; } 
    public string FrequencyDuration { get; set; } 
    public string FrequencyDurationDate { get; set; } 
    public string FrequencyWeekday { get; set; } 
    public int? FrequencyAmount { get; set; } 
    public string FrequencyAmountRange { get; set; } 
    public int? TotalAmount { get; set; } 
    public int? TotalInAmount { get; set; } 
    public int? TotalOutAmount { get; set; } 
    public int? MonthlyAmount { get; set; } 
    public string GroupID { get; set; } 
    public string Display { get; set; } 
    public string FrequencyExactness { get; set; } 
    public string FrequencyPeriod { get; set; } 
    public object ScoreEmployer { get; set; } 
    public object ScoreDirCr { get; set; } 
    public object ScoreWeekday { get; set; } 
    public object ScoreFrequency { get; set; } 
    public object ScoreAmount { get; set; } 
    public int? ScoreTotal { get; set; } 
} 

public class SmallAmountRepayment 
{ 
    public int AccountID { get; set; } 
    public string H1 { get; set; } 
    public string H2 { get; set; } 
    public string H3 { get; set; } 
    public string SH1 { get; set; } 
    public string Description { get; set; } 
    public int Count { get; set; } 
    public string FrequencyDescription { get; set; } 
    public string FrequencyDuration { get; set; } 
    public string FrequencyDurationDate { get; set; } 
    public string FrequencyWeekday { get; set; } 
    public double FrequencyAmount { get; set; } 
    public string FrequencyAmountRange { get; set; } 
    public double TotalAmount { get; set; } 
    public int TotalInAmount { get; set; } 
    public double TotalOutAmount { get; set; } 
    public double MonthlyAmount { get; set; } 
    public string GroupID { get; set; } 
    public string Display { get; set; } 
    public string FrequencyExactness { get; set; } 
    public string FrequencyPeriod { get; set; } 
    public object ScoreEmployer { get; set; } 
    public object ScoreDirCr { get; set; } 
    public object ScoreWeekday { get; set; } 
    public object ScoreFrequency { get; set; } 
    public object ScoreAmount { get; set; } 
    public int ScoreTotal { get; set; } 
} 

public class OtherLoan 
{ 
    public int AccountID { get; set; } 
    public string H1 { get; set; } 
    public string H2 { get; set; } 
    public string H3 { get; set; } 
    public string SH1 { get; set; } 
    public string Description { get; set; } 
    public object Count { get; set; } 
    public object FrequencyDescription { get; set; } 
    public object FrequencyDuration { get; set; } 
    public object FrequencyDurationDate { get; set; } 
    public object FrequencyWeekday { get; set; } 
    public object FrequencyAmount { get; set; } 
    public object FrequencyAmountRange { get; set; } 
    public object TotalAmount { get; set; } 
    public object TotalInAmount { get; set; } 
    public object TotalOutAmount { get; set; } 
    public object MonthlyAmount { get; set; } 
    public object GroupID { get; set; } 
    public object Display { get; set; } 
    public object FrequencyExactness { get; set; } 
    public object FrequencyPeriod { get; set; } 
    public object ScoreEmployer { get; set; } 
    public object ScoreDirCr { get; set; } 
    public object ScoreWeekday { get; set; } 
    public object ScoreFrequency { get; set; } 
    public object ScoreAmount { get; set; } 
    public object ScoreTotal { get; set; } 
} 

public class OtherRepayment 
{ 
    public int AccountID { get; set; } 
    public string H1 { get; set; } 
    public string H2 { get; set; } 
    public string H3 { get; set; } 
    public string SH1 { get; set; } 
    public string Description { get; set; } 
    public object Count { get; set; } 
    public object FrequencyDescription { get; set; } 
    public object FrequencyDuration { get; set; } 
    public object FrequencyDurationDate { get; set; } 
    public object FrequencyWeekday { get; set; } 
    public object FrequencyAmount { get; set; } 
    public object FrequencyAmountRange { get; set; } 
    public object TotalAmount { get; set; } 
    public object TotalInAmount { get; set; } 
    public object TotalOutAmount { get; set; } 
    public object MonthlyAmount { get; set; } 
    public object GroupID { get; set; } 
    public object Display { get; set; } 
    public object FrequencyExactness { get; set; } 
    public object FrequencyPeriod { get; set; } 
    public object ScoreEmployer { get; set; } 
    public object ScoreDirCr { get; set; } 
    public object ScoreWeekday { get; set; } 
    public object ScoreFrequency { get; set; } 
    public object ScoreAmount { get; set; } 
    public object ScoreTotal { get; set; } 
} 

public class Loans 
{ 
    public List<SmallAmountLoan> __invalid_name__Small Amount Loans { get; set; } 
    public List<SmallAmountRepayment> __invalid_name__Small Amount Repayments { get; set; } 
    public List<OtherLoan> __invalid_name__Other Loans { get; set; } 
    public List<OtherRepayment> __invalid_name__Other Repayments { get; set; } 
} 

public class Dishonour 
{ 
    public int AccountID { get; set; } 
    public string H1 { get; set; } 
    public string H2 { get; set; } 
    public string H3 { get; set; } 
    public string SH1 { get; set; } 
    public string Description { get; set; } 
    public int? Count { get; set; } 
    public string FrequencyDescription { get; set; } 
    public string FrequencyDuration { get; set; } 
    public string FrequencyDurationDate { get; set; } 
    public string FrequencyWeekday { get; set; } 
    public double? FrequencyAmount { get; set; } 
    public string FrequencyAmountRange { get; set; } 
    public double? TotalAmount { get; set; } 
    public double? TotalInAmount { get; set; } 
    public int? TotalOutAmount { get; set; } 
    public double? MonthlyAmount { get; set; } 
    public string GroupID { get; set; } 
    public string Display { get; set; } 
    public string FrequencyExactness { get; set; } 
    public string FrequencyPeriod { get; set; } 
    public object ScoreEmployer { get; set; } 
    public object ScoreDirCr { get; set; } 
    public object ScoreWeekday { get; set; } 
    public object ScoreFrequency { get; set; } 
    public object ScoreAmount { get; set; } 
    public int? ScoreTotal { get; set; } 
} 

public class Dishonours 
{ 
    public List<Dishonour> Dishonours { get; set; } 
} 

public class HighRiskMerchant 
{ 
    public int AccountID { get; set; } 
    public string H1 { get; set; } 
    public string H2 { get; set; } 
    public string H3 { get; set; } 
    public string SH1 { get; set; } 
    public string Description { get; set; } 
    public object Count { get; set; } 
    public object FrequencyDescription { get; set; } 
    public object FrequencyDuration { get; set; } 
    public object FrequencyDurationDate { get; set; } 
    public object FrequencyWeekday { get; set; } 
    public object FrequencyAmount { get; set; } 
    public object FrequencyAmountRange { get; set; } 
    public object TotalAmount { get; set; } 
    public object TotalInAmount { get; set; } 
    public object TotalOutAmount { get; set; } 
    public object MonthlyAmount { get; set; } 
    public object GroupID { get; set; } 
    public object Display { get; set; } 
    public object FrequencyExactness { get; set; } 
    public object FrequencyPeriod { get; set; } 
    public object ScoreEmployer { get; set; } 
    public object ScoreDirCr { get; set; } 
    public object ScoreWeekday { get; set; } 
    public object ScoreFrequency { get; set; } 
    public object ScoreAmount { get; set; } 
    public object ScoreTotal { get; set; } 
} 

public class HighRiskMerchants 
{ 
    public List<HighRiskMerchant> __invalid_name__High Risk Merchants { get; set; } 
} 

public class Rent 
{ 
    public int AccountID { get; set; } 
    public string H1 { get; set; } 
    public string H2 { get; set; } 
    public string H3 { get; set; } 
    public string SH1 { get; set; } 
    public string Description { get; set; } 
    public int? Count { get; set; } 
    public string FrequencyDescription { get; set; } 
    public string FrequencyDuration { get; set; } 
    public string FrequencyDurationDate { get; set; } 
    public string FrequencyWeekday { get; set; } 
    public int? FrequencyAmount { get; set; } 
    public string FrequencyAmountRange { get; set; } 
    public int? TotalAmount { get; set; } 
    public int? TotalInAmount { get; set; } 
    public int? TotalOutAmount { get; set; } 
    public int? MonthlyAmount { get; set; } 
    public string GroupID { get; set; } 
    public string Display { get; set; } 
    public string FrequencyExactness { get; set; } 
    public string FrequencyPeriod { get; set; } 
    public object ScoreEmployer { get; set; } 
    public object ScoreDirCr { get; set; } 
    public object ScoreWeekday { get; set; } 
    public object ScoreFrequency { get; set; } 
    public object ScoreAmount { get; set; } 
    public int? ScoreTotal { get; set; } 
} 

public class Periodic 
{ 
    public int AccountID { get; set; } 
    public string H1 { get; set; } 
    public string H2 { get; set; } 
    public string H3 { get; set; } 
    public string SH1 { get; set; } 
    public string Description { get; set; } 
    public int? Count { get; set; } 
    public string FrequencyDescription { get; set; } 
    public string FrequencyDuration { get; set; } 
    public string FrequencyDurationDate { get; set; } 
    public string FrequencyWeekday { get; set; } 
    public double? FrequencyAmount { get; set; } 
    public string FrequencyAmountRange { get; set; } 
    public double? TotalAmount { get; set; } 
    public int? TotalInAmount { get; set; } 
    public double? TotalOutAmount { get; set; } 
    public double? MonthlyAmount { get; set; } 
    public string GroupID { get; set; } 
    public string Display { get; set; } 
    public string FrequencyExactness { get; set; } 
    public string FrequencyPeriod { get; set; } 
    public object ScoreEmployer { get; set; } 
    public object ScoreDirCr { get; set; } 
    public object ScoreWeekday { get; set; } 
    public object ScoreFrequency { get; set; } 
    public object ScoreAmount { get; set; } 
    public int? ScoreTotal { get; set; } 
} 

public class NonPeriodic 
{ 
    public int AccountID { get; set; } 
    public string H1 { get; set; } 
    public string H2 { get; set; } 
    public string H3 { get; set; } 
    public string SH1 { get; set; } 
    public string Description { get; set; } 
    public int Count { get; set; } 
    public string FrequencyDescription { get; set; } 
    public string FrequencyDuration { get; set; } 
    public string FrequencyDurationDate { get; set; } 
    public string FrequencyWeekday { get; set; } 
    public double FrequencyAmount { get; set; } 
    public string FrequencyAmountRange { get; set; } 
    public double TotalAmount { get; set; } 
    public int TotalInAmount { get; set; } 
    public double TotalOutAmount { get; set; } 
    public int MonthlyAmount { get; set; } 
    public string GroupID { get; set; } 
    public string Display { get; set; } 
    public string FrequencyExactness { get; set; } 
    public string FrequencyPeriod { get; set; } 
    public object ScoreEmployer { get; set; } 
    public object ScoreDirCr { get; set; } 
    public object ScoreWeekday { get; set; } 
    public object ScoreFrequency { get; set; } 
    public object ScoreAmount { get; set; } 
    public int ScoreTotal { get; set; } 
} 

public class TopUncommittedSpend 
{ 
    public int AccountID { get; set; } 
    public string H1 { get; set; } 
    public string H2 { get; set; } 
    public string H3 { get; set; } 
    public string SH1 { get; set; } 
    public string Description { get; set; } 
    public int? Count { get; set; } 
    public string FrequencyDescription { get; set; } 
    public string FrequencyDuration { get; set; } 
    public string FrequencyDurationDate { get; set; } 
    public string FrequencyWeekday { get; set; } 
    public double? FrequencyAmount { get; set; } 
    public string FrequencyAmountRange { get; set; } 
    public double? TotalAmount { get; set; } 
    public double? TotalInAmount { get; set; } 
    public int? TotalOutAmount { get; set; } 
    public int? MonthlyAmount { get; set; } 
    public string GroupID { get; set; } 
    public string Display { get; set; } 
    public string FrequencyExactness { get; set; } 
    public string FrequencyPeriod { get; set; } 
    public object ScoreEmployer { get; set; } 
    public object ScoreDirCr { get; set; } 
    public object ScoreWeekday { get; set; } 
    public object ScoreFrequency { get; set; } 
    public object ScoreAmount { get; set; } 
    public int? ScoreTotal { get; set; } 
} 

public class Liabilities 
{ 
    public List<Rent> Rent { get; set; } 
    public List<Periodic> Periodic { get; set; } 
    public List<NonPeriodic> __invalid_name__Non-Periodic { get; set; } 
    public List<TopUncommittedSpend> __invalid_name__Top Uncommitted Spend { get; set; } 
} 

public class Overview 
{ 
    public Income Income { get; set; } 
    public Loans Loans { get; set; } 
    public Dishonours Dishonours { get; set; } 
    public HighRiskMerchants __invalid_name__High Risk Merchants { get; set; } 
    public Liabilities Liabilities { get; set; } 
} 

public class Overviews 
{ 
    public Overview Overview { get; set; } 
} 

public class Transaction 
{ 
    public int AccountID { get; set; } 
    public object TranID { get; set; } 
    public string CleanDesc { get; set; } 
    public string Category { get; set; } 
    public object TranDate { get; set; } 
    public object TranAmount { get; set; } 
    public object TranBaseTypeID { get; set; } 
    public string TranBaseType { get; set; } 
    public string GroupID { get; set; } 
    public double Balance { get; set; } 
} 

public class Transactions 
{ 
    public List<Transaction> Transaction { get; set; } 
} 

public class Account 
{ 
    public int AccountID { get; set; } 
    public string AccountNumber { get; set; } 
    public string AccountType { get; set; } 
    public string AccountName { get; set; } 
    public string AccountHolder { get; set; } 
    public string SecondaryAccountHolder { get; set; } 
    public double BankAvailableBalance { get; set; } 
    public double BankCurrentBalanceOriginal { get; set; } 
    public double BankCurrentBalance { get; set; } 
    public object CardMinPayment { get; set; } 
    public object CardRunningBalance { get; set; } 
    public object CardLastPaymentAmount { get; set; } 
    public object CardAvailableCredit { get; set; } 
    public object CardTotalCreditLine { get; set; } 
    public object CardDueDate { get; set; } 
    public object CardLastPaymentDate { get; set; } 
    public string CreateDT { get; set; } 
    public int ServiceID { get; set; } 
    public string BankName { get; set; } 
    public string AccountBSB { get; set; } 
    public int DishonourCount { get; set; } 
    public int DaysRange { get; set; } 
    public object accountCategoryId { get; set; } 
    public object accountCategory { get; set; } 
    public object loanInterestRateTypeId { get; set; } 
    public object loanInterestRateType { get; set; } 
    public object loanTerm { get; set; } 
    public object loanTypeId { get; set; } 
    public object loanType { get; set; } 
    public object interestRate { get; set; } 
    public object dueDateLoan { get; set; } 
    public object overDraft { get; set; } 
    public object lastPaymentDate { get; set; } 
    public double MaxAmountOverdraft { get; set; } 
    public int DaysOverdraft { get; set; } 
    public double TotalCredits { get; set; } 
    public double TotalDebits { get; set; } 
    public string FirstTransaction { get; set; } 
    public string LastTransaction { get; set; } 
    public double DayAgoBalance { get; set; } 
    public Overviews Overviews { get; set; } 
    public Transactions Transactions { get; set; } 
} 

public class Accounts 
{ 
    public List<Account> Account { get; set; } 
} 

public class DecisionPoint 
{ 
    public int CriteriaID { get; set; } 
    public int ReportID { get; set; } 
    public string Criteria { get; set; } 
    public string CriteriaName { get; set; } 
    public string Score { get; set; } 
    public object ScoreDT { get; set; } 
    public int CriteriaTypeID { get; set; } 
} 

public class DecisionPoints 
{ 
    public List<DecisionPoint> DecisionPoint { get; set; } 
} 

public class Application 
{ 
    public int AppID { get; set; } 
    public int ReportID { get; set; } 
    public string AppReference { get; set; } 
    public string CreateDT { get; set; } 
    public string ClientName { get; set; } 
    public string StoreName { get; set; } 
    public string Email { get; set; } 
    public string StoreCode { get; set; } 
    public string AppShortReference { get; set; } 
    public string ClientNameShort { get; set; } 
    public string StoreNameShort { get; set; } 
    public object VerifyEmployer { get; set; } 
    public object VerifyAmount { get; set; } 
    public object VerifyFrequency { get; set; } 
    public object VerifyWeekday { get; set; } 
    public string LocalityCode { get; set; } 
    public int TemplateReportID { get; set; } 
    public int daysRange { get; set; } 
    public string templateReportName { get; set; } 
    public Accounts Accounts { get; set; } 
    public DecisionPoints DecisionPoints { get; set; } 
} 

public class Applications 
{ 
    public Application Application { get; set; } 
} 

public class RootObject 
{ 
    public Applications Applications { get; set; } 
} 

С 2 «RootObjects» Мне нужно знать, как объявить это?

Есть ли способ сделать это? или лучше всего выводить его и разрабатывать новый скрипт?

Заранее спасибо.

+0

может у показать как ур * Base64 закодированные JSON строка * и * декодируется json string * выглядит как ?? –

+0

Это первоначальный ответ. "содержание" является кодированный JSON –

+0

{ "Успех": правда, "Ответ": { "postVersion": 2, "APPID": 2891426, "appReference": «Таплин 12-Окт-16 10 : 37: 2 утра», "createDate": "2016-10-12 10: 36: 59,8900000", "CLIENTNAME": "GoGetta Брисбен", "StoreName": "ПОВ", "привязанностей": [ { "типа": "Кредит Sense Report", "имя": "Enhanced доход Обязательства Полный отчет", "CONTENTTYPE": "JSON", "содержание": "eyJBcHBsaWNhdGlvbnMiOnsiQXBwbGljYXRpb24iOnsiQXBwSUQiOjI4OTE0MjYsIlJlcG9ydElEIjo0 ..." } ] } } ' –

ответ

0

Вы можете изменить имя Rootobject для декодированного JSON в

public class RootObjectDecoded 
{ 
    public Applications Applications { get; set; } 
} 

и в то время как вы хотите deseralize это

var rr = JsonConvert.DeserializeObject<RootObjectDecoded>(yourdecodedjson); 
+0

Спасибо! могу ли я сделать то же самое с недопустимыми именами, в которых есть пробелы? и json2sharp назвал их недействительными? 'public class Обязательства { public List Rent {get; задавать; } Публичный Список Периодический {get; задавать; } public List __invalid_name__Non-Periodic {get; задавать; } public List __invalid_name__Top Uncommitted Spend {get; задавать; } } ' –

+0

Я не уверен, какие имена вы говорите, но у вас не может быть пробелов в имени класса. Это, безусловно, неверное имя. –

+0

Да, я знаю, что это недопустимое имя класса, но если я изменю его на допустимое имя, оно будет десериализоваться правильно? –