2017-04-26 84 views
2

我正在使用來自REST API的HTTPWebResponse,它作爲Base64編碼返回。當我解碼它似乎Deserialise罰款,但是當我創建clasess我有名稱是無效的,並在其中有空格。Deserialised JSON Respose C#Classes with Spaces

我試過JsonObject和JsonProperty,但我似乎沒有在Visual Studio 2010和SQL Server 2008 R2(SSIS)中的可用引用和名稱空間,我無法弄清楚如何通過這個。

這是一個交易細節文件,因此非常大,不能張貼在這裏。我想知道是否有人可以指示我如何加載正確的引用來使用上述方法,或者告訴我如何閱讀帶有空格的Json標籤,並且仍然有效地在SSIS中的c#腳本組件中聲明它們。

實例:迴應:

  "High Risk Merchants": { 
       "High Risk Merchants": [ 
       { 
        "AccountID": 4829640, 
        "H1": "High Risk Merchants", 
        "H2": "High Risk Merchants", 
        "H3": "", 
        "SH1": "", 
        "Description": "{NO MATCH}", 
        "Count": null, 
        "FrequencyDescription": null, 
        "FrequencyDuration": null, 
        "FrequencyDurationDate": null, 
        "FrequencyWeekday": null, 
        "FrequencyAmount": null, 
        "FrequencyAmountRange": null, 
        "TotalAmount": null, 
        "TotalInAmount": null, 
        "TotalOutAmount": null, 
        "MonthlyAmount": null, 
        "GroupID": null, 
        "Display": null, 
        "FrequencyExactness": null, 
        "FrequencyPeriod": null, 
        "ScoreEmployer": null, 
        "ScoreDirCr": null, 
        "ScoreWeekday": null, 
        "ScoreFrequency": null, 
        "ScoreAmount": null, 
        "ScoreTotal": null 
       } 
       ] 
      }, 

例如:C#類聲明(json2csharp)

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 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 HighRiskMerchants 
{ 
    public List<HighRiskMerchant> __invalid_name__High Risk Merchants { get; set; } 
} 

數據輸出呼叫

foreach (HighRiskMerchant hrm in ac.Overviews.Overview.HighRiskMerchants.HighRiskMerchantEntity) 
      { 
       RptOverviewDataBuffer.AddRow(); 
       RptOverviewDataBuffer.Type = "HighRiskMerchants"; 
       RptOverviewDataBuffer.SubType = "HighRiskMerchantsEntity"; 
       RptOverviewDataBuffer.AccountID = Convert.ToInt32(hrm.AccountID); 
       RptOverviewDataBuffer.H1 = hrm.H1; 
       RptOverviewDataBuffer.H2 = hrm.H2; 
       RptOverviewDataBuffer.H3 = hrm.H3; 
       RptOverviewDataBuffer.SH1 = hrm.SH1; 
       RptOverviewDataBuffer.Description = hrm.Description; 
       RptOverviewDataBuffer.Count = Convert.ToInt32(hrm.Count); 
       RptOverviewDataBuffer.FrequencyDescription = hrm.FrequencyDescription; 
       RptOverviewDataBuffer.FrequencyDuration = hrm.FrequencyDuration; 
       RptOverviewDataBuffer.FrequencyDurationDate = hrm.FrequencyDurationDate; 
       RptOverviewDataBuffer.FrequencyWeekday = hrm.FrequencyWeekday; 
       RptOverviewDataBuffer.FrequencyAmount = Convert.ToDouble(hrm.FrequencyAmount); 
       RptOverviewDataBuffer.FrequencyAmountRange = hrm.FrequencyAmountRange; 
       RptOverviewDataBuffer.TotalAmount = Convert.ToDouble(hrm.TotalAmount); 
       RptOverviewDataBuffer.TotalInAmount = Convert.ToDouble(hrm.TotalInAmount); 
       RptOverviewDataBuffer.TotalOutAmount = Convert.ToDouble(hrm.TotalOutAmount); 
       RptOverviewDataBuffer.MonthlyAmount = Convert.ToDouble(hrm.MonthlyAmount); 
       RptOverviewDataBuffer.GroupID = hrm.GroupID; 
       RptOverviewDataBuffer.Display = hrm.Display; 
       RptOverviewDataBuffer.FrequencyExactness = hrm.FrequencyExactness; 
       RptOverviewDataBuffer.FrequencyPeriod = hrm.FrequencyPeriod; 
       RptOverviewDataBuffer.ScoreEmployer = Convert.ToInt32(hrm.ScoreEmployer); 
       RptOverviewDataBuffer.ScoreDirCr = Convert.ToInt32(hrm.ScoreDirCr); 
       RptOverviewDataBuffer.ScoreWeekday = hrm.ScoreWeekday; 
       RptOverviewDataBuffer.ScoreFrequency = hrm.ScoreFrequency; 
       RptOverviewDataBuffer.ScoreAmount = Convert.ToDouble(hrm.ScoreAmount); 
       RptOverviewDataBuffer.ScoreTotal = Convert.ToInt32(hrm.ScoreTotal); 
      } 
+0

分享你的JSON響應和類。 –

+0

正如我所說這是太大,超出了限制,但我已經添加了示例 –

+0

你不需要發佈完整的json,只是你的json的樣子以及你的類的圖像。 –

回答

1

對於使用圖書館,你可以使用的NuGet到install "Json.Net"

在這個例子中,它會是:

public class HighRiskMerchants 
{ 
    [JsonProperty(PropertyName = "High Risk Merchants")] 
    public List<HighRiskMerchant> HighRiskMerchants { get; set; } 
} 
+0

如何安裝NuGet Json.Net?我似乎沒有鏈接顯示的選項。我正在使用Microsoft Visual Studio 2010 版本10.0.40219.1 SP1Rel Microsoft .NET Framework 版本4.5.51209 SP1Rel –

+0

首先,您需要安裝Nuget,然後從那裏安裝Json.Net。請嘗試此[鏈接](http:// peterkellner.net/2011/03/02/installing-nuget-on-vs2010-first-blood/) – spinalfrontier

+0

我已經試過這個,它不會安裝一個版本,將允許我安裝Json.Net,因爲我限制在VS 2010殼牌。這些是我在這裏得到的錯誤[鏈接](http://stackoverflow.com/questions/43646661/nuget-json-net-install-erros-vs-2010-shell?noredirect=1#comment74341851_43646661) –