代码之家  ›  专栏  ›  技术社区  ›  Luke101

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

  •  1
  • Luke101  · 技术社区  · 15 年前

    它将使用linq-to-enties从数据库中获取所有信息。然后将数据存储在类中。然后我想把这个类转换成XML。当数据是XML格式时,我会将XML和xsl样式表一起发送到浏览器,以显示给用户。最快的方法是什么。

    7 回复  |  直到 15 年前
        1
  •  5
  •   Jordão    15 年前

    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();
    
        2
  •  2
  •   Guffa    15 年前

    最快的方法是自己编写代码。这将消除任何开销,比如需要使用反射来读取对象的属性,因为您可以直接访问属性。

    将一个方法添加到以XML形式返回其数据的类中,方法可以是返回XDocument(XML已格式化为字符串),也可以将XmlWriter传递给该方法。

        3
  •  0
  •   Carson63000    15 年前

    你所说的“最快”是指你想要最快发展的方法吗?或者你想要执行速度最快的方法?

    如果是前者,我建议只使用.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

        4
  •  0
  •   Richard Anthony Hein    15 年前

    Foo foo = new Foo();
    XmlSerializer serializer = new XmlSerializer(typeof(Foo));
    TextWriter writer = new StringWriter();
    serializer.Serialize(writer, foo);
    string xml = writer.ToString();
    
        5
  •  0
  •   Jon Hanna    15 年前

    最快的方法取决于类,因为它是手工编写的,以便以更一般的方法无法做到的方式利用该类的特定知识。

    之后,您可以随时插入经过超级优化的XmlWriter实现;)

        6
  •  0
  •   George Stocker NotMe    15 年前

        7
  •  0
  •   Just another metaprogrammer    15 年前

    我编写了一个程序,用不同的方式将一个简单的对象图序列化为XML: 1使用XmlSerializer

    30000份文件: XmlSerializer耗时:0.9秒

    请注意,您可以指示VisualStudio在编译时生成XmlSerializer程序集,以减少第一个实例的序列化(否则将在运行时生成程序集)。