C# 尝试使用XElement和LINQ将XML加载到类对象中
我有以下XMLC# 尝试使用XElement和LINQ将XML加载到类对象中,c#,xml,linq,C#,Xml,Linq,我有以下XML <Workflow Name="Workflow1"> <Parameter Name="Parameter1">Value1</Parameter> <Parameter Name="Parameter2">Value2</Parameter> <Environment Name="Environment1" Type="Typ1"> <DataCenter Name="DC1" Dep
<Workflow Name="Workflow1">
<Parameter Name="Parameter1">Value1</Parameter>
<Parameter Name="Parameter2">Value2</Parameter>
<Environment Name="Environment1" Type="Typ1">
<DataCenter Name="DC1" DeployEnvironmentName="blah"/>
</Environment>
<Environment Name="Environment2" Type="Typ2">
<DataCenter Name="DC2" DeployEnvironmentName="blah"/>
</Environment>
我总是遇到语法错误。出于某种原因,它似乎不喜欢这些嵌套表达式。有人知道会出什么问题,或者知道更好的方法吗?提前感谢您需要删除此分号
Name = p.Attribute("Name").Value,
Type = (EnvironmentType)Enum.Parse(typeof
(EnvironmentType), p.Attribute("Type").Value, true),
DataCenters = p.Elements("DataCenter").Select(
dc => new DataCenter {
Name = dc.Attribute("Name").Value, DeployEnvironmentName = dc.Attribute
("DeployEnvironmentName").Value })
});
^^^
});
在中不应使用分号,应使用逗号分隔属性。您的XML文件似乎已损坏。
工作流
标记从未关闭。您能提供错误消息吗?我一直收到语法错误。-什么错误?哪里到目前为止,您进行了哪些调试,发现了什么?你需要进一步隔离这个问题。一个好的起点是将庞大的Linq表达式分解成几行,以便您可以实际调试它。
var workflows =
root.Elements("Workflow")
.Select(
e =>
new Workflow
{
Name = e.Attribute("Name").Value,
Parameters = e.Elements("Parameter")
.Select(p =>
new Parameter { Name = p.Attribute("Name").Value, Value = p.Value }),
Environments = e.Elements("Environment").Select(
p =>
new Environment
{
Name = p.Attribute("Name").Value,
Type = (EnvironmentType)Enum.Parse(typeof
(EnvironmentType), p.Attribute("Type").Value, true),
DataCenters = p.Elements("DataCenter").Select(
dc => new DataCenter {
Name = dc.Attribute("Name").Value, DeployEnvironmentName = dc.Attribute
("DeployEnvironmentName").Value })
});
});
Name = p.Attribute("Name").Value,
Type = (EnvironmentType)Enum.Parse(typeof
(EnvironmentType), p.Attribute("Type").Value, true),
DataCenters = p.Elements("DataCenter").Select(
dc => new DataCenter {
Name = dc.Attribute("Name").Value, DeployEnvironmentName = dc.Attribute
("DeployEnvironmentName").Value })
});
^^^
});