我正在 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;
}
然后,您可以使用新的数据表来序列化数据,而不是使用原始数据表。