c# - 使用空格反序列化 JSON 响应 C# 类

标签 c# sql-server json visual-studio-2010 ssis

我正在使用来自以 Base64 编码返回的 REST API 的 HTTPWebResponse。当我解码时它似乎反序列化很好但是当我创建类时我有无效的名称并且其中有空格。

我已经尝试过 JsonObject 和 JsonProperty,但我似乎在 Visual Studio 2010 和 SQL Server 2008 R2 (SSIS) 中没有可用的引用和 namespace ,我不知道如何解决这个问题。

这是一个交易明细文件,因此非常大,无法在此处发布。我想知道是否有人可以告诉我如何加载正确的引用以使用上述方法,或者告诉我如何读取带空格的 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);
            }

最佳答案

要使用的库,可以用nuget来install "Json.Net"

在这个例子中,它将是:

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

关于c# - 使用空格反序列化 JSON 响应 C# 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43624833/

相关文章:

c# - [优化] : Slow LINQ to Objects Query

java - 使用Windows身份验证在java中连接到远程MS sqlserver

sql-server - 将日期字符串与 SQL Server 中的日期时间进行比较?

php - 从服务器编码的 JSON 数据出现问题,无法绘制图表

c# - 旋转脚本问题?

c# - 如何模仿内置的 .NET 序列化习惯用法?

c# - 如何获取 Windows 8 Live ID

php - 如果使用参数绑定(bind),PHP 中的查询无法在 SQL Server 中查看临时表

json - 在 Go 中将组合对象转换为 json

PHP | json_decode 巨大的 json 文件