json - 从 JSON 对象数组迭代和插入到 sqlute db 的最佳实践
问题描述
我正在从 Web 服务调用返回压缩数据,该调用返回一个 json 数组,该数组中填充了具有键/值对数组的对象。其中一些可能会或可能不会作为空对象返回,这很好。只是意味着没有更新。
解压后我的 json 对象以这种格式返回:
{
"Warehouse":[[]],
"Managers":[{"ID":"12404","EmployeeID":"4776","Name":"Sammy Silver"}, {"ID":"12405","EmployeeID":"4778","Name":"Tom Castro"} ],
"T1":[{"ID":"60458","EmployeeID":"25902","Name":"Angela Li"}...,...,]
"DeletedWarehouse" : [{"ID":"70141","EmployeeID":"12345","Name":"Victor Bajas"}...,...]
我的代码如下所示:
var jsonList = JsonConvert.DeserializeObject<Root>(response.Content.ReadAsStringAsync().Result);
我的根:
public class Root
{
public List< Warehouse > Warehouse { get; set; }
public List< Management > Managers { get; set; }
public List< Top > T1 { get; set; }
public List< Warehouse > DeletedWarehouse { get; set; }
}
我想更新被视为已更新的行,例如仓库、经理和 T1。仓库是空的..所以那里什么都不会发生,但其余的我正在尝试遍历它们以运行对我的本地数据库的查询。但是我儿子认为我这样做不正确。我想我重复自己太多了,我不想那样做,但我想不出不同的方式。
if(jsonList.Warehouse.Count > 0)
{
//loop and insert or replace here..
}
if(jsonList.Managers.Count > 0)
{
//loop and insert or update
}
if(jsonList.T1.Count > 0)
{
//loop and insert or update
}
if(jsonList.DeletedWarehouse.Count > 0)
{
//loop and delete from table
}
我正在使用一个 dbmaanger 类来存储我所有的 sqlite 交互,所以我将创建一个函数,我可以在其中插入、替换或删除所有行。但在我这样做之前,我想看看我上面的逻辑是好的。
谢谢。
解决方案
我想更新被视为已更新的行,例如仓库、经理和 T1。仓库是空的..所以那里什么都不会发生,但其余的我正在尝试遍历它们以运行对我的本地数据库的查询。
可以foreach jsonList,通过id查找数据库中的当前数据,如果是,就更新,如果不是,插入。
public class SQLiteHelper
{
SQLiteAsyncConnection db;
public SQLiteHelper(string dbPath)
{
db = new SQLiteAsyncConnection(dbPath);
//db.CreateTableAsync<Person>().Wait();
db.CreateTableAsync<Managers>().Wait();
}
//Insert and Update new record
public Task<int> SaveItemAsync(Managers person)
{
if (person.ID != null)
{
return db.UpdateAsync(person);
}
else
{
return db.InsertAsync(person);
}
}
}
SQLiteHelper db;
private void btn1_Clicked(object sender, EventArgs e)
{
db = new SQLiteHelper(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "XamarinSQLite.db3"));
}
private void btn2_Clicked(object sender, EventArgs e)
{
if (jsonList.Managers.Count > 0)
{
foreach(Managers item in jsonList.Managers)
{
db.SaveItemAsync(item);
}
}
}
推荐阅读
- javascript - 在 Mac-Chrome 浏览器中录制来自 IOS 的 webrtc 流时,MediaRecorder Web API 无法正常工作
- c# - 如何为 WCF SOAP 服务传递标头
- r - ggplot2第一次休息的不同标签
- django - 在 AWS S3 上设置媒体文件访问
- google-cloud-platform - 我想使用 terraform 在 GCP 中创建公共和私有子网
- azure - 如何将 Azure devops 服务挂钩事件元数据作为参数发送到 jenkins 管道
- python - 无法使用漂亮的汤选择特定的 html 元素
- javascript - 根据状态为单选按钮列表动态添加类:ReactJS
- rxjs - Rxjs - 在订阅函数中等待
- ios - 没有找到 `React-fishhook` 的 podspec