【发布时间】:2018-03-15 23:46:37
【问题描述】:
我正在 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;
}
【问题讨论】:
-
为什么不避免在查询本身中获取这些列?
-
这样的声音应该在序列化为 JSON 时完成,而不是在字符串中......如果你能显示该代码,它会有所帮助。
-
@DipenShah 我想避免在查询本身中获取它们,因为我必须在每个查询中避免大量列。我希望创建一个“屏蔽”列的列表,然后我可以遍历我得到的每个 JSON 对象,它会应用屏蔽。
-
@MIkeMcCaughan 我会在上面添加。
-
也许你可以只捕获类中想要的列,然后序列化 [JsonExtensionData] 中的其他所有内容