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

如何创建要传递给自定义报表类的参数类?

  •  0
  • orandov  · 技术社区  · 15 年前

    我正在使用一个自定义报表引擎,该引擎使用XML和XSL将报表数据输出到浏览器。每个报表可以有多个不同值类型的参数(整数、字符串、日期)。

    下面是代码现在的样子:

    public class Report
    {
        //Common functions used by all reports
    }
    
    public class OrderDetailReport : Report
    {
        public long? Parameter1 { get; set; }
        public long? Parameter2 { get; set; }
    
        public XElement CreateXML()
        {
            var xml = new XElement();
    
            xml.Add(GetXMLParameters());
    
            //Get Data and generate XML
    
            return xml;
        }
    
        public XElement GetXMLParameters()
        {
            var parameters = new XElement("Parameters",
                                new XElement("Parameter",
                                        new XAttribute("Name", "Parameter1"),
                                        new XAttribute("Value", Parameter1)),
                                new XElement("Parameter",
                                        new XAttribute("Name", "Parameter2"),
                                        new Attribute("Value", Parameter2)));
            return parameters;
        }
    }
    

    什么应该 Parameter

    编辑:

    GetXMLParameters() 函数到基类,并有一个类似于 List<Parameter> 在基地里 GetXMLParameters()

    这样可以避免 GetXMLParameters() 在每个 CustomReport

    谢谢。我希望这是清楚的。
    奥兰

    2 回复  |  直到 15 年前
        1
  •  1
  •   WeNeedAnswers    15 年前

    看看序列化。net中有许多xml序列化程序(wcf、xml等)将为您转换对象。还可以通过对要序列化的成员使用属性来塑造xml输出。

    按要求:

    public static class SerialiserHelper
    {
            public static string Serialize(this object @object)
            {
                try
                {
    
                   DataContractSerializer serializer = new DataContractSerializer(@object.GetType());
    
    
                    using (MemoryStream memoryStream = new MemoryStream())
                    {
    
                        serializer.WriteObject(memoryStream, @object);
    
                        var encoder = new System.Text.UTF8Encoding(false);
    
                        return encoder.GetString(memoryStream.GetBuffer(), 0, Convert.ToInt32(memoryStream.Length));
                    }
                }
                catch (Exception e)
                {
                    throw e;
                }
            }
    
    
    
            public static T DeSerialize<T>(this string serializedObject)
            {
                DataContractSerializer serializer = new DataContractSerializer(typeof(T));
    
                var encoder = new System.Text.UTF8Encoding(false);
    
                using (var memoryStream = new MemoryStream(encoder.GetBytes(serializedObject)))
                {   
                    return (T)serializer.ReadObject(memoryStream);
                }
            }