Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将不同模式的json文件解析到不同的json.net表_C#_Json_Json.net - Fatal编程技术网

C# 将不同模式的json文件解析到不同的json.net表

C# 将不同模式的json文件解析到不同的json.net表,c#,json,json.net,C#,Json,Json.net,我收到了不同模式的json文件,必须将它们转储到sql数据库中 json文件具有该模式 {'type':'abc','data':{'column1':'x','column2':'y',.........}} 对应于每种模式类型,我有一个强类型类,名为类似于该类型,但附加了单词“Table” 例如,“abcTable”,它只有json.data的模式(column1,column2,…) 所以,我可以做的是对主json进行动态反序列化,然后根据类型值对相应数据进行强类型json解析 dyna

我收到了不同模式的json文件,必须将它们转储到sql数据库中

json文件具有该模式

{'type':'abc','data':{'column1':'x','column2':'y',.........}}
对应于每种模式类型,我有一个强类型类,名为类似于该类型,但附加了单词“Table”

例如,“abcTable”,它只有json.data的模式(column1,column2,…)

所以,我可以做的是对主json进行动态反序列化,然后根据类型值对相应数据进行强类型json解析

dynamic jsondata = JsonConvert.DeserializeObject<dynamic>(json);
if (jsonata.type=='abc')
{
var abcobj = JsonConvert.DeserializeObject<abcTable>(jsondata.data);
}
动态jsondata=JsonConvert.DeserializeObject(json); if(jsonata.type=='abc') { var abcobj=JsonConvert.DeserializeObject(jsondata.data); } 在这里,我将反序列化对象两次,因此看起来不是正确的方式

此外,我还有25+个这样的模式和类似数量的类/表

所以,我将使用很多if/else if/else语句

我想知道是否有其他更好的方法来解决我想做的事情

衷心感谢您的帮助


谢谢

像往常一样,
JObject
是你的朋友:

var parsed = JObject.Parse(json);
var type = parsed.Value<string>("type");

if (type == "abc")
{
   var abcObject = parsed["data"].ToObject<abcTable>();
}

var handlers=newlist();
Add(新的AbcTableHandler());
Add(新的OtherHandler());

通常,
JObject
是你的朋友:

var parsed = JObject.Parse(json);
var type = parsed.Value<string>("type");

if (type == "abc")
{
   var abcObject = parsed["data"].ToObject<abcTable>();
}

var handlers=newlist();
Add(新的AbcTableHandler());
Add(新的OtherHandler());

通常,
JObject
是你的朋友:

var parsed = JObject.Parse(json);
var type = parsed.Value<string>("type");

if (type == "abc")
{
   var abcObject = parsed["data"].ToObject<abcTable>();
}

var handlers=newlist();
Add(新的AbcTableHandler());
Add(新的OtherHandler());

通常,
JObject
是你的朋友:

var parsed = JObject.Parse(json);
var type = parsed.Value<string>("type");

if (type == "abc")
{
   var abcObject = parsed["data"].ToObject<abcTable>();
}

var handlers=newlist();
Add(新的AbcTableHandler());
Add(新的OtherHandler());

请看我的编辑,我提出了避免许多if的代码。请看我的编辑,我提出了避免许多if的代码。请看我的编辑,我提出了避免许多if的代码。请看我的编辑,我提出了避免许多if的代码。我想应该是handlers.FirstOrDefault,另外,如何在var处理程序中添加另一个处理程序“XyzTableHandler”,TxI只找到了一个使用new[]的示例。。var StaffMembers=new[]{新员工(20204,“Harry Fields”,EmploymentStatus.FullTime,16.85),新员工(92857,“Jennifer Almonds”,EmploymentStatus.FullTime,22.25),新员工(42963,“Sharon Culbritt”,EmploymentStatus.PartTime,10.95)};请让我知道如何添加多个处理程序——TxI认为应该是处理程序。FirstOrDefault,以及如何在var处理程序中添加另一个处理程序“XyzTableHandler”,TxI只找到了一个使用new[]的示例。。var StaffMembers=new[]{新员工(20204,“Harry Fields”,EmploymentStatus.FullTime,16.85),新员工(92857,“Jennifer Almonds”,EmploymentStatus.FullTime,22.25),新员工(42963,“Sharon Culbritt”,EmploymentStatus.PartTime,10.95)};请让我知道如何添加多个处理程序——TxI认为应该是处理程序。FirstOrDefault,以及如何在var处理程序中添加另一个处理程序“XyzTableHandler”,TxI只找到了一个使用new[]的示例。。var StaffMembers=new[]{新员工(20204,“Harry Fields”,EmploymentStatus.FullTime,16.85),新员工(92857,“Jennifer Almonds”,EmploymentStatus.FullTime,22.25),新员工(42963,“Sharon Culbritt”,EmploymentStatus.PartTime,10.95)};请让我知道如何添加多个处理程序——TxI认为应该是处理程序。FirstOrDefault,以及如何在var处理程序中添加另一个处理程序“XyzTableHandler”,TxI只找到了一个使用new[]的示例。。var StaffMembers=new[]{新员工(20204,“Harry Fields”,EmploymentStatus.FullTime,16.85),新员工(92857,“Jennifer Almonds”,EmploymentStatus.FullTime,22.25),新员工(42963,“Sharon Culbritt”,EmploymentStatus.PartTime,10.95)};请务必告知如何添加多个处理程序--Tx
var handlers = new List<ITableType>();
handlers.Add(new AbcTableHandler());
handlers.Add(new OtherHandler());