>我正在尝试解析一个json文件,然后对其进行操作以将数据插入SQL Server 2008数据库。
例:
var sr = new StreamReader("C:\path to filefile.json");
var json = JsonSerializer.SerializeToString(sr);
var o = JsonObject.Parse(json);
但我总是在第二行收到此错误 - "此流不支持超时"。
Json 文件如下所示:
"main":{
"prg": [
{
"Id": 1,
"name": "A&E",
more fields
}
"prg": [
{
"Id": 2,
"name": "asda",
more fields
}
}
我需要做这样的东西
foreach (prg in main)
entity.id = prg.id
entity.name = prg.name
我该怎么做,为什么会出现超时异常?
编辑:为了更好地理解我的问题,这就是我对XML文件所做的
XmlDocument sourceDoc = new XmlDocument();
sourceDoc.Load(SourcesElement2); // where SourcesElement2 is the path to my XML
XmlNodeList prg = sourceDoc.GetElementsByTagName("prg");
foreach (XmlNode item in prg)
{
entity.Name= item.SelectSingleNode("name").InnerText;
...
}
我已经将XML转换为Json,我想做同样的事情。对于 Json 文件中的每个"prg"节点,在数据库中插入一个新项
编辑2:
这就是我所做的。
using (
StreamReader stream =
File.OpenText(
"C:\path\Sources.json")
)
{
JObject sources = (JObject) JToken.ReadFrom(new JsonTextReader(stream));
var a = sources["on"];
var b = a["sources"];
var c = b["prgs"];
foreach (var item in c)
{
var d= item.SelectToken("prg");
// Here d is null
}
我有与上面相同的问题。对于 Json 文件中的每个"prg"节点,在数据库中插入一个新项。我该怎么做? ( PRG 的路径已打开/来源/PRGS/)
我认为您不想序列化流。
JsonSerializer.SerializeToString(sr)
您希望从流中反序列化。
JsonSerializer.Deserialize
出于性能原因,您可能希望使用 JsonReader。
您的 XML 示例将整个文件加载到内存中 - 您不希望对大型文档执行此操作。 reader.Read()
模式更适合处理大型文件。
对于每个有相同问题的人,这就是我所做的(注意:这只是一个例子)
顺便说一句,感谢所有试图回答我问题的人,我很抱歉我的错误。
List<string> d = new List<string>();
using (
StreamReader stream =
File.OpenText(
"C:\path\Sources.json")
)
{
JObject sources = (JObject) JToken.ReadFrom(new JsonTextReader(stream));
var a = sources["on"];
var b = a["sources"];
var c = b["prgs"];
foreach (JObject item in c["prg"].ToList())
{
d.Add(item.Value<string>("name"));
}
}
//part below is just for testing
foreach (var VARIABLE in d)
{
Console.WriteLine(VARIABLE);
}
Console.ReadLine();
我会将该 JSON 对象转换为 C# 类,然后将逻辑应用于 C# 对象和/或使用数据表[注意:网上有一些解决方案表明,您可以轻松地将Object
或List<Object>
传递到DataTable中,然后将其"轻松"传递给SQL]
第一步仍然是您在任一解决方案中的打嗝,如何从文件系统中提取大型 JSON 字符串?
如果您有 JSON,请使用 json2csharp.com 和/或 jsonutils.com 检索类,以便将其反序列化为对象。
StreamReader re = new StreamReader(@"C:path to filefile.json");
JsonTextReader reader = new JsonTextReader(re);
YourClass DeserializedObject = se.Deserialize<YourClass>(reader);
Console.WriteLine(DeserializeObject.SomeProperty);