C# 如何在WebAPI2中将嵌套列表LINQ转换为JSON?
我正在创建一个返回Json的web api。我的输出如下所示:C# 如何在WebAPI2中将嵌套列表LINQ转换为JSON?,c#,json,linq,asp.net-web-api,C#,Json,Linq,Asp.net Web Api,我正在创建一个返回Json的web api。我的输出如下所示: [ { "NodeID":1252, "CASNumber":"1333-86-4", "EINECSCode":"215-609-9", "EUIndex":"215-609-9", "Duty":"No", "Prohibited":"No", "Unwanted":"No", "IsReach":"No",
[
{
"NodeID":1252,
"CASNumber":"1333-86-4",
"EINECSCode":"215-609-9",
"EUIndex":"215-609-9",
"Duty":"No",
"Prohibited":"No",
"Unwanted":"No",
"IsReach":"No",
"SubstanceName":"Carbon black",
"GroupName":"Renault Complete",
"Portion":0.100000
},
{
"NodeID":1252,
"CASNumber":"1333-86-4",
"EINECSCode":"215-609-9",
"EUIndex":"215-609-9",
"Duty":"No",
"Prohibited":"No",
"Unwanted":"No",
"IsReach":"No",
"SubstanceName":"Carbon black",
"GroupName":"Renault Orange",
"Portion":0.100000
}
]
{
"NodeID":1252,
"CASNumber":"1333-86-4",
"EINECSCode":"215-609-9",
"EUIndex":"215-609-9",
"Duty":"No",
"Prohibited":"No",
"Unwanted":"No",
"IsReach":"No",
"SubstanceName":"Carbon black",
"GroupName":[
{
"name":"Renault Complete"
},
{
"name":"Renault Orange"
}
],
"Portion":0.100000
}
我正在尝试使用以下ouptut创建嵌套Json:
[
{
"NodeID":1252,
"CASNumber":"1333-86-4",
"EINECSCode":"215-609-9",
"EUIndex":"215-609-9",
"Duty":"No",
"Prohibited":"No",
"Unwanted":"No",
"IsReach":"No",
"SubstanceName":"Carbon black",
"GroupName":"Renault Complete",
"Portion":0.100000
},
{
"NodeID":1252,
"CASNumber":"1333-86-4",
"EINECSCode":"215-609-9",
"EUIndex":"215-609-9",
"Duty":"No",
"Prohibited":"No",
"Unwanted":"No",
"IsReach":"No",
"SubstanceName":"Carbon black",
"GroupName":"Renault Orange",
"Portion":0.100000
}
]
{
"NodeID":1252,
"CASNumber":"1333-86-4",
"EINECSCode":"215-609-9",
"EUIndex":"215-609-9",
"Duty":"No",
"Prohibited":"No",
"Unwanted":"No",
"IsReach":"No",
"SubstanceName":"Carbon black",
"GroupName":[
{
"name":"Renault Complete"
},
{
"name":"Renault Orange"
}
],
"Portion":0.100000
}
这是我的班级:
public class BasicSubstances
{
public int NodeID { get; set; }
public string CASNumber { get; set; }
public string EINECSCode { get; set; }
public string EUIndex { get; set; }
public string Duty { get; set; }
public string Prohibited { get; set; }
public string Unwanted { get; set; }
public string IsReach { get; set; }
public string SubstanceName { get; set; }
public string GroupName { get; set; }
public decimal ?Portion { get; set; }
}
这是我的控制器:
public List<BasicSubstances> GetBasicSubstance(string partNumber, string version, int nodeID, int parentID )
{
IMDSDataContext dc = new IMDSDataContext();
List<BasicSubstances> results = new List<BasicSubstances>();
foreach (spGetBasicSubstanceResult part in dc.spGetBasicSubstance( partNumber, version, nodeID, parentID))
{
results.Add(new BasicSubstances()
{
NodeID = part.NodeID,
CASNumber = part.CASNumber,
EINECSCode = part.EINECSCode,
EUIndex = part.EINECSCode,
Duty = part.Duty,
Prohibited = part.Prohibited,
Unwanted = part.Unwanted,
IsReach = part.ISReach,
SubstanceName = part.SynonymName,
GroupName = part.GroupName,
Portion = part.Portion
});
}
return results;
}
公共列表GetBasicSubstance(字符串零件号、字符串版本、int-nodeID、int-parentID)
{
IMDSDataContext dc=新的IMDSDataContext();
列表结果=新列表();
foreach(dc.spGetBasicSubstance中的spGetBasicSubstanceResult部件(部件号、版本、节点ID、父ID))
{
结果.添加(新的基本物质()
{
NodeID=part.NodeID,
CASNumber=零件号CASNumber,
EINECSCode=part.EINECSCode,
EUIndex=part.eineCode,
责任,
禁止的,禁止的,
不需要的,不需要的,
IsRach=part.isRach,
SubstanceName=part.SynonymName,
GroupName=part.GroupName,
部分
});
}
返回结果;
}
我的Json看起来像第一个输出,我需要它看起来像第二个输出。
我完全迷路了,任何帮助都将不胜感激。好吧,您可以尝试以下方法: 您的型号:
public class BasicSubstanceViewModel
{
public int NodeID { get; set; }
public string CASNumber { get; set; }
public string EINECSCode { get; set; }
public string EUIndex { get; set; }
public string Duty { get; set; }
public string Prohibited { get; set; }
public string Unwanted { get; set; }
public string IsReach { get; set; }
public string SubstanceName { get; set; }
public List<GroupName> GroupName { get; set; }
public decimal ?Portion { get; set; }
}
public class GroupName
{
public string Name { get; set; }
}
public BasicSubstanceViewModel GetBasicSubstance(string partNumber, string version, int nodeID, int parentID )
{
IMDSDataContext dc = new IMDSDataContext();
var spResult = dc.spGetBasicSubstance( partNumber, version, nodeID, parentID).ToList();
if(!spResult.Any())
{
return null;
}
var firstPart = spResult[0];
var result = new BasicSubstanceViewModel
{
NodeID = firstPart.NodeID,
CASNumber = firstPart.CASNumber,
EINECSCode = firstPart.EINECSCode,
EUIndex = firstPart.EINECSCode,
Duty = firstPart.Duty,
Prohibited = firstPart.Prohibited,
Unwanted = firstPart.Unwanted,
IsReach = firstPart.ISReach,
SubstanceName = firstPart.SynonymName,
GroupName = spResult.Select(p => new GroupName { Name = p.GroupName }).ToList(),
Portion = firstPart.Portion
};
return result;
}
希望能有所帮助。好吧,您可以尝试以下方法: 您的型号:
public class BasicSubstanceViewModel
{
public int NodeID { get; set; }
public string CASNumber { get; set; }
public string EINECSCode { get; set; }
public string EUIndex { get; set; }
public string Duty { get; set; }
public string Prohibited { get; set; }
public string Unwanted { get; set; }
public string IsReach { get; set; }
public string SubstanceName { get; set; }
public List<GroupName> GroupName { get; set; }
public decimal ?Portion { get; set; }
}
public class GroupName
{
public string Name { get; set; }
}
public BasicSubstanceViewModel GetBasicSubstance(string partNumber, string version, int nodeID, int parentID )
{
IMDSDataContext dc = new IMDSDataContext();
var spResult = dc.spGetBasicSubstance( partNumber, version, nodeID, parentID).ToList();
if(!spResult.Any())
{
return null;
}
var firstPart = spResult[0];
var result = new BasicSubstanceViewModel
{
NodeID = firstPart.NodeID,
CASNumber = firstPart.CASNumber,
EINECSCode = firstPart.EINECSCode,
EUIndex = firstPart.EINECSCode,
Duty = firstPart.Duty,
Prohibited = firstPart.Prohibited,
Unwanted = firstPart.Unwanted,
IsReach = firstPart.ISReach,
SubstanceName = firstPart.SynonymName,
GroupName = spResult.Select(p => new GroupName { Name = p.GroupName }).ToList(),
Portion = firstPart.Portion
};
return result;
}
希望能有所帮助。如何确保除
GroupName
之外的所有属性都具有相同的值?它们将始终具有相同的值。在我的存储过程中,它只有一条记录,我加入了一个表以获得组名的多个列表。组名的类型应该是公共列表组名{get;set;}
?不能使用字符串创建json数组。您需要在这里执行一些操作GroupName=part.GroupName,
如何确保除GroupName
之外的所有属性都具有相同的值?它们始终具有相同的值。在我的存储过程中,它只有一条记录,我加入了一个表以获得组名的多个列表。组名的类型应该是公共列表组名{get;set;}
?不能使用字符串创建json数组。您需要在这里执行一些操作GroupName=part.GroupName,
var firstPart=spResult[0];引发错误:错误14无法将带[]的索引应用于类型为“System.Data.Linq.ISingleResult”的表达式的完美工作,需要在:party=firstPart.party};后加分号;。它不允许我编辑。谢谢我漏掉了一个细节,我希望你愿意帮助我。原来我还需要将SubstanceName嵌套。当我修改代码以适应这种情况时。我得到了SubstanceName和GroupName的副本。您只需修改ViewModel
,以容纳更多的集合。您甚至可以使用相同的嵌套模型/类;引发错误:错误14无法将带[]的索引应用于类型为“System.Data.Linq.ISingleResult”的表达式的完美工作,需要在:party=firstPart.party};后加分号;。它不允许我编辑。谢谢我漏掉了一个细节,我希望你愿意帮助我。原来我还需要将SubstanceName嵌套。当我修改代码以适应这种情况时。我得到了SubstanceName和GroupName的副本。您只需修改ViewModel
,以容纳更多的集合。您甚至可以使用相同的嵌套模型/类。我这样做了,但现在我得到了重复的值。