我想知道将相当大的类转换为XML的最快和最轻量级的技术是什么。该类将包含列表和数组。我需要将所有这些数据转换为XML
以下是我的应用程序的作用: 它将使用linq从数据库中获取所有信息。然后将数据存储在类中。然后我想将此类转换为XML。当数据是XML格式时,我会将XML与xsl样式表一起发送到浏览器以显示给用户。最快的方法是什么。
答案 0 :(得分:5)
XmlSerializer
实际上会创建一个程序集(XmlSerializationWriter
),该程序集是为了序列化您的类而自定义的。您可以按照these steps。
您只需在第一次遇到新类型时付费。
所以我认为你应该真正选择XmlSerializer
,不仅仅是为了表现,还要考虑可维护性。
您可以使用mixin-like序列化程序类:
public interface MXmlSerializable { }
public static class XmlSerializable {
public static string ToXml(this MXmlSerializable self) {
if (self == null) throw new ArgumentNullException();
var serializer = new XmlSerializer(self.GetType());
using (var writer = new StringWriter()) {
serializer.Serialize(writer, self);
return writer.GetStringBuilder().ToString();
}
}
}
public class Customer : MXmlSerializable {
public string Name { get; set; }
public bool Preferred { get; set; }
}
// ....
var customer = new Customer {
Name = "Guybrush Threepwood",
Preferred = true };
var xml = customer.ToXml();
答案 1 :(得分:2)
最快的方法是自己编写代码。这将消除任何开销,例如需要使用反射来读取对象的属性,因为您可以直接访问属性。
通过返回一个XDocument,已经格式化为字符串的XML,或者可以将XmlWriter传递给该方法,向该类添加一个方法,该方法将其数据作为XML返回。
答案 2 :(得分:0)
“最快”是否意味着您希望开发速度最快的方法?或者您是否希望这种方法具有最快的执行速度?
如果是前者,我建议只使用.NET的XmlSerializer
类:http://msdn.microsoft.com/en-us/library/system.xml.serialization.xmlserializer.aspx
将类序列化为XML输出非常简单:
XmlSerializer serializer = new XmlSerializer(myObject.GetType());
serializer.Serialize(Response.OutputStream, myObject);
您可以使用各种属性来控制类,以控制各个属性是否被序列化为元素或属性等。
http://www.devolutions.net/articles/serialization.aspx还有一个很好的常见问题解答
答案 3 :(得分:0)
您可以使用XML序列化,例如:
Foo foo = new Foo();
XmlSerializer serializer = new XmlSerializer(typeof(Foo));
TextWriter writer = new StringWriter();
serializer.Serialize(writer, foo);
string xml = writer.ToString();
答案 4 :(得分:0)
最快的方法取决于课程,因为它是手写的,以更普遍的方法无法利用对该课程细节的了解。
我可能会使用XmlTextWriter,而不是直接使用TextWriter。虽然后者可以进一步节省,但与XmlTextWriter的更好结构相比,这些将是最小的,并且您已经在结构和易维护性方面牺牲了很多。
您可以随后插入XmlWriter的超级优化实现;)
答案 5 :(得分:0)
当你可以使用ASP.NET MVC在网页上显示类的信息时,这听起来像是一个相当复杂的设置。为什么要采取额外的两个步骤将其转换为XML,将其发送到浏览器,并使用XSL样式表将其显示给用户?这没有意义。
答案 6 :(得分:0)
我编写了一个程序,它以一种不同的方式将一个简单的对象图序列化为XML: 1.使用XmlSerializer 2.使用硬编码的xml序列化程序
30,000份文件: XmlSerializer花费:0.9秒 硬编码序列化器采用:0.45秒
在这两种情况下我都依赖于XmlWriter,这会增加一些开销。
请注意,您可以指示Visual Studio在编译期间生成XmlSerializer程序集,以减少该第一个实例的序列化(否则在运行时生成程序集)。