将类转换为XML的最快方法是什么?

时间:2010-08-12 23:32:35

标签: c# xml xslt asp.net-mvc-2

我想知道将相当大的类转换为XML的最快和最轻量级的技术是什么。该类将包含列表和数组。我需要将所有这些数据转换为XML

以下是我的应用程序的作用: 它将使用linq从数据库中获取所有信息。然后将数据存储在类中。然后我想将此类转换为XML。当数据是XML格式时,我会将XML与xsl样式表一起发送到浏览器以显示给用户。最快的方法是什么。

7 个答案:

答案 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程序集,以减少该第一个实例的序列化(否则在运行时生成程序集)。