我有一个包含一些数据成员的类(int,string,bool,Point)。 这些数据成员具有公共属性{get;设置;}
在我的代码中,我使用默认构造函数创建此类的实例。
因此,我的对象的数据成员的值分别为0
,string.Empty
,false
,{0,0}
。
如何初始化字段数据的这些值 从XML文件,使用LINQ to XML 没有创建对象的新实例。
我只想阅读XML,并设置我的对象的值。
答案 0 :(得分:2)
使用Linq to XML非常容易。这是一个人为的例子,如果文档较长并且您需要验证输入,它会变得更加困难,但基本思路是相同的
var root = XDocument.Parse(@"<data>
<num>3</num>
<str>string</str>
<boo>true</boo>
<point x=""3"" y=""5"" />
</data>").Root;
public class MyObject()
{
public class Point
{
int X {get;set;}
int Y {get;set;}
}
public MyObject() {
Point = new Point();
}
public int Num {get;set;}
public string Str {get;set;}
public bool Boo {get;set;}
public Point Point {get; private set;}
}
var myObj = root.Select(new MyObject
{
Num = int.Parse(root.Element("num").Value),
Str = root.Element("str").Value,
Boo = bool.Parse(root.Element("boo").Value),
Point.X = int.Parse(root.Element("point").Attribute("x").Value),
Point.Y = int.Parse(root.Element("point").Attribute("y").Value)
});
答案 1 :(得分:1)
LINQ是一种函数式语言,这意味着您无法使用它来改变数据,这就是您要做的事情(更改现有对象)。 您可能想重新考虑自己在做什么。
但是如果您真的想在LINQ查询中执行此操作,则始终可以通过调用方法创建具有副作用(但不建议)的查询。这是一个例子:
static MyObj UpdateMyObj(MyObj obj, int a, string b,
bool c, Point d)
{
obj.A = a;
obj.B = b;
obj.C = c;
obj.D = d;
return obj;
}
现在,您可以在select
子句中使用此方法:
MyObj obj = new MyObj();
var q = (
from x in xml.GetDescendants("root")
select UpdateMyObj(obj, (int)x.Element("a"), ...))
.ToArray();