我目前正在尝试从网络服务器读取一个JSON文档(它是一个物理json文件)并检查对我的数据库的更改。换句话说,我需要每晚都同步json文档和数据库。
为此,我正在使用JSON.NET,我相信在C#中使用JSON时要采用的方式(?).NET平台版本为3.5。
到目前为止,我能够阅读文档并从中获取值。
我的JSON看起来像这样:
{"members":[
{"member":
{
"id":"4282",
"status":"1931",
"aktiv":"1",
"firmanavn":"firmname1",
"firmaUrl":"www.firmsite.com",
"firmaUrlAlternativ":"",
"firmaSidstKontrolleretDato":"30-08-2010",
"firmaGodkendelsesDato":"07-03-2002"
}
},
{"member":
{
"id":"4283",
"status":"1931",
"aktiv":"1",
"firmanavn":"firmname2",
"firmaUrl":"www.firmsite.com",
"firmaUrlAlternativ":"",
"firmaSidstKontrolleretDato":"30-08-2010",
"firmaGodkendelsesDato":"18-12-2000"
}
}, .... and so on
]}
我的C#代码如下:
using (TextReader reader = File.OpenText(Server.MapPath("~/members.json")))
{
JsonTextReader jsonreader = new JsonTextReader(reader);
var o = JObject.ReadFrom(jsonreader);
jsonreader.Close();
JObject obj = JObject.Parse(o.ToString());
JArray items = (JArray)obj["members"];
var members = Member.GetAllAsList();
JObject item;
JToken token;
List<string> currentIds = new List<string>();
for (int i = 0; i < items.Count; i++)
{
item = (JObject)items[i];
token = item.First;
while (token != null)
{
//ltTest.Text += ((JProperty)token).Value["firmanavn"].ToString() + System.Environment.NewLine;
currentIds.Add(((JProperty)token).Value["id"].ToString());
token = token.Next;
}
}
foreach (var member in members)
{
if (!currentIds.Contains(member.Id.ToString()))
{
ltTest.Text += member.Text;
}
}
}
基本上,现在有三种情况:
数据库中的成员信息已更改:我需要在JSON文档中找到该成员并更新相应的字段
成员已从数据库中删除:我需要在JSON文档中找到该成员并将其删除。
成员已添加到数据库中:我需要将该成员添加到JSON文档中。
那么,是否有人熟悉JSON.NET提供如何实现这一点的提示(或者可能是一些代码示例?)?我几乎没有让它真正从服务器上读取json文档,所以这对我来说似乎是一场艰苦的战斗。
答案 0 :(得分:2)
Json.net有一个名为Linq-to-JSON的东西,据该网站称:
LINQ to JSON不是LINQ提供程序,而是用于处理的API JSON对象。 API的设计考虑了LINQ,以便启用 快速创建和查询JSON对象。
所以它支持LINQ查询,我没有使用Linq-to-JSON,但我相信,它将满足你的所有三个要求。
如需参考和操作方法,请点击以下链接: http://james.newtonking.com/archive/2008/02/11/linq-to-json-beta.aspx http://james.newtonking.com/projects/json/help/
答案 1 :(得分:1)
为了满足您的要求,我建议采取以下步骤:
MEMBER
非常简单
从那里,您发出与您的三种情况匹配的SQL查询:
数据库中的成员信息已更改:我需要在JSON文档中找到该成员并更新相应的字段
为了做到这一点,发出一个比较每个字段的SQL查询,使用结果集来更新JSON
已从数据库中删除某个成员:我需要在JSON文档中找到该成员并将其删除。
使用原始表中的NOT IN比较器与刚刚创建的Member
表进行比较,发出SQL查询进行比较。从这里,您将从结果集中获取可用于删除相应JSON对象的ID集合
已将成员添加到数据库中:我需要将该成员添加到JSON文档中。
执行上述步骤的相反步骤。发出SQL查询,比较数据库中但不在Member
表中的数据。使用结果集添加到JSON对象
在流程结束时,您将拥有代表两个
之间同步的JSON对象