【发布时间】:2012-12-16 03:31:13
【问题描述】:
我之前问过一个问题,可以找到here, 我想知道接受答案的代码是否可以在正常编程中完成没有
Linq查询,任何示例都将不胜感激。
请注意,这是我开始实施它的方式,并且在实施过程中遇到了一些问题。我已经设法通过反射获得私有字段值而不使用属性,这有问题吗?我是否应该始终通过反射中的属性获取值?
代码:
public static class Extensions
{
public static XElement ToXml<T>(this T obj)
{
Type type = typeof(T);
return new XElement("Class",
new XElement(type.Name,
from pi in type.GetProperties()
where !pi.GetIndexParameters().Any()
let value = (dynamic)pi.GetValue(obj, null)
select pi.PropertyType.IsPrimitive ||
pi.PropertyType == typeof(string) ?
new XElement(pi.Name, value) :
Extensions.ToXml(value)
)
);
}
}
提前致谢
【问题讨论】:
-
您在实施过程中遇到了哪些问题?您有不同的机会来构建 xml - XmlWriter、XmlDocument,但是 LINQ 有什么问题?
-
@lazyberezovsky 也许他需要早期版本的 .NET 框架 - linq 只是来自版本 3(3.5?)
-
@elyashiv 好吧,那么奇怪他为什么在上一个问题中询问
XElement的用法。我觉得应该还有问题 -
我真的很喜欢你的回答,我想我已经完全理解它了,但只是为了一般知识,我想知道我是否可以按照我的方式去做。在我的实现中,没有 XmlWriter 仅使用 XElements 来构建嵌套的分层 xml。所以我猜答案是基于某种方式使用 Xml 编写器,除了使用 XElement 的 c'tor 之外?
-
@JavaSa 如果您使用的是
System.Xml.Linq.XElement,那么您已经在使用 Linq。我觉得this tutorial对你很有帮助
标签: c# xml linq reflection linq-to-xml