簡體   English   中英

將類轉換為XML的最快方法是什么

[英]What is the fastest way to convert a class to XML

我想知道什么是將相當大的類轉換為XML的最快,最輕量的技術。 該類將具有列表和數組。 我需要將所有這些數據轉換為XML

這是我的應用程序所做的事情:它將使用linq to enties從數據庫中獲取所有信息。 然后將數據存儲在一個類中。 然后,我想將此類轉換為XML。 當數據為XML格式時,我會將XML以及xsl樣式表發送給瀏覽器,以顯示給用戶。 最快的方法是什么?

XmlSerializer實際上創建了一個程序集(帶有XmlSerializationWriter ),該程序集是定制的以序列化您的類。 您可以按照以下步驟查看生成的代碼。

您只需在第一次遇到新類型時支付價格。

因此,我認為您確實應該使用XmlSerializer ,這不僅是為了提高性能,而且是為了實現可維護性。

您可以使用類似於mixin的序列化器類:

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();

最快的方法是自己編寫代碼。 這將消除任何開銷,例如需要使用反射來讀取對象的屬性,因為您可以直接訪問屬性。

將方法添加到類中,以返回XML數據,方法是返回XDocument(已格式化為字符串的XML),也可以將XmlWriter傳遞給該方法。

“最快”是指您要開發最快的方法嗎? 還是您想要執行速度最快的方法?

如果是前者,我建議僅使用.NET的XmlSerializer類: http : //msdn.microsoft.com/zh-cn/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上也有很好的FAQ。

您可以使用XML序列化,例如:

Foo foo = new Foo();
XmlSerializer serializer = new XmlSerializer(typeof(Foo));
TextWriter writer = new StringWriter();
serializer.Serialize(writer, foo);
string xml = writer.ToString();

最快的方法將取決於類,因為它將被手寫以利用更通用的方法無法做到的方式來利用該類的特定知識。

我可能會使用XmlTextWriter而不是直接使用TextWriter。 盡管后者可以帶來更多節省,但是與XmlTextWriter的更好結構相比,這些節省是最小的,並且您已經在結構和易於維護方面犧牲了很多。

之后,您始終可以在XmlWriter的超級優化實現中添加插槽;)

當您僅可以使用ASP.NET MVC在網頁上顯示類的信息時,這聽起來像是一個相當復雜的設置。 為什么還要執行另外兩個步驟,將其轉換為XML,將其發送到瀏覽器,並使用XSL樣式表將其顯示給用戶? 這沒有道理。

我編寫了一個程序,以不同的方式將一個簡單的對象圖序列化為XML:1.使用XmlSerializer 2.使用硬編碼的xml序列化器

30,000個文檔:XmlSerializer花費了:0.9秒Hardcoded序列化器花費了:0.45秒

在這兩種情況下,我都依賴XmlWriter,這增加了一些開銷。

請注意,您可以指示Visual Studio在編譯時生成XmlSerializer程序集,以減少該第一個實例的序列化(否則在運行時中生成程序集)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM