2017-04-26 4 views
2

Je consomme une HTTPWebResponse à partir d'une API REST qui revient en tant que Base64 Encoded. Quand je décode, il semble que je désérialise bien, mais quand je crée des clasess, j'ai des noms qui sont invalides et qui ont des espaces. J'ai essayé JsonObject et JsonProperty, mais je ne semble pas avoir les références et les espaces de noms disponibles dans Visual Studio 2010 et SQL Server 2008 R2 (SSIS) et je ne peux pas comprendre comment y remédier.JSON désérialisé de classes C# avec des espaces

Il s'agit d'un fichier de détails de transaction et, en tant que tel, est très volumineux et ne peut pas être posté ici. Je me demande si quelqu'un peut me montrer comment charger les bonnes références pour utiliser les méthodes ci-dessus ou bien comment lire les balises Json avec des espaces et les déclarer validement dans le composant de script C# dans SSIS.

EXEMPLE: RÉPONSE:

  "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 
       } 
       ] 
      }, 

Exemple: C# déclaration de classe (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; } 
} 

Sortie de données Appels

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

Partagez votre réponse JSON et les classes. –

+0

Comme je l'ai dit c'est trop grand et dépasse la limite, mais j'ai ajouté l'exemple –

+0

Vous n'avez pas besoin de publier full json, juste une image de la façon dont votre json ressemble et vos classes aussi bien. –

Répondre

1

Pour la bibliothèque à utiliser, vous pouvez utiliser NuGet à install "Json.Net"

Dans cet exemple, ce serait:

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

Comment installer NuGet Json.Net? Je ne semble pas avoir les options que votre lien montre. J'utilise Microsoft Visual Studio 2010 Version 10.0.40219.1 SP1Rel Microsoft .NET Framework Version 4.5.51209 SP1Rel –

+0

Vous devez d'abord installer Nuget, puis installer Json.Net à partir de là. Essayez ce [lien] (http: // peterkellner.net/2011/03/02/installing-nuget-on-vs2010-first-blood/) – spinalfrontier

+0

J'ai essayé ceci et il ne va pas installer une version qui me permettra d'installer Json.Net comme je suis limité à VS 2010 SHELL . Thèses sont les erreurs que je reçois ici [link] (http://stackoverflow.com/questions/43646661/nuget-json-net-install-erros-vs-2010-shell?noredirect=1#comment74341851_43646661) –