根据列值隐藏单个 JSON 值的任何简单方法



我正在 C# 中开发一些测试方法,用于验证在对各种记录进行 UI 更改后数据库记录是否正确更新。

在此过程中,我开发了一个返回 SQL 查询字符串的方法,然后将其序列化为 JSON 字符串。使用此字符串,我将其写入临时文件,然后将其与基线预期文件进行比较,然后验证更新是否正确。

问题是我从中提取的表非常广泛并且有很多列,其中一些列每次都会因创建日期、上次更新日期或任何类似值而有所不同。

问题:

给定一个简单的 JSON 字符串(我的实际字符串要大得多(:

[
    {
        "id": 1,
        "name": "A green door",
        "price": 12.50,
        "home": "Penn"
        "date": "April 4, 2015"
    }
]

有没有简单的方法可以用任何指定的值掩盖所有"日期"值,从而导致返回如下所示:

[
    {
        "id": 1,
        "name": "A green door",
        "price": 12.50,
        "home": "Penn"
        "date": "MASKEDVALUE"
    }
]

如果需要更多信息进行澄清,请告诉我。

序列化代码:

public string ReturnQueryAsJson(string statement)
{
    var dataTable = new DataTable();
    var configManager = new ConfigurationManager();
    var connectionString = configManager.AppSettings["DatabaseConnectionString"];
    string query = statement;
    SqlConnection connection = new SqlConnection(connectionString);
    SqlCommand command = new SqlCommand(query, connection);
    connection.Open();
    SqlDataAdapter dataAdapter = new SqlDataAdapter(command);
    dataAdapter.Fill(dataTable);
    connection.Close();
    dataAdapter.Dispose();
    JsonConvert.SerializeObject(dataTable);
    string JsonResult;            
    JsonResult = JsonConvert.SerializeObject(dataTable, Formatting.Indented);
    return JsonResult;
}

您可以使用某种变压器来为您进行转换,例如:

   public DataTable DataTableDataTransformer(DataTable original, string[] columns, string maskedValue)
   {
        // get column indices
        int[] columnIndices = columns.Select(col => original.Columns.IndexOf(col))
                                      .Where(i => i >= 0)
                                      .ToArray();
        // clone original table structure
        var retVal = original.Clone();
        // change datatype of the columns in cloned table
        foreach (var index in columnIndices)
            retVal.Columns[index].DataType = typeof(string);
        //add data to new table
        foreach(DataRow row in original.Rows)
        {
            var values = row.ItemArray;
            foreach (var index in columnIndices)
                values[index] = maskedValue;
            retVal.Rows.Add(values);
        }
        return retVal;
    }

然后,您可以使用新的数据表来序列化数据,而不是使用原始数据表。

相关内容

最新更新