通过DataContract序列化为XML Writer

时间:2013-04-03 19:44:45

标签: c# linq-to-entities xml-serialization datacontractserializer

我是.NET的新手,但是现在已经开始研究这个项目,但是进展很少,而且课程数量变得有点压倒性。

目标:

  1. 从实体框架表生成数据(假设使用LINQ)< - LINQ似乎正在运行。

  2. 将数据转换为XML< -Not working in all

  3. 电子邮件,如果不工作< - 这工作得很好奇怪lol;)

  4. 任何人都可以通过DataContract连接到一个实体和序列化(可能使用泛型,如果这是最好的方法)给我一个代码示例,通过DataContract连接到XML Writer?根据评论,这里是我想要的样本。 - 所以我们也要说在这个模型中我们要加入“DIRTYMIKE”表,其中包含“The Boys”作为一个对象,其名称将通过xml提取,PRIUS中的“CARS”表由id显然这是一个理论上的一组实体,但希望它能让某人轻笑:)

    这里有一些理论课我刚刚掀起 - 希望这能更好地解释目标是什么:

     public class TheOtherGuys 
    {
        private static ILog log;
        private string theBoysWrapper;
        private int rowsRead = 0;
        private int outputRecords = 0;
        private bool warnings = false;
        private bool fatal = false;
        private bool fatalMsg = false;
        /// <summary>
        /// Next wrap the xml with a Document Wrapper and Element Wrapper
        /// </summary>
       public TheOtherGuys(ILog log)
        {
    
            XmlDocument doc = new XmlDocument();
            XmlDeclaration dec = doc.CreateXmlDeclaration("1.0", null, null);
            doc.AppendChild(dec);//creates root
            XmlElement root = doc.CreateElement("DIRTYMIKE");
            doc.AppendChild(root);
            XmlElement nextElem = doc.CreateElement("THEBOYS");
            log = LogManager.GetLogger(this.GetType());
            if (log.IsDebugEnabled == true)
            {
                log.Debug(GetType().Name + ".Constructor(): enter");
            }
            //creates new xml Document and set up declaration and root
    
            if (log.IsDebugEnabled == true)
            {
                log.Debug(GetType().Name + ".Constructor(): exit");
            }
        }
        //Read data from DIRTY_MIKE_AND_THE_BOYS and CAR Tables
        //Translate the results into xml
        private void process(DateTime process) {
    
            XmlDocument doc = new XmlDocument();
            XmlDeclaration dec = doc.CreateXmlDeclaration("1.0", null, null);
            doc.AppendChild(dec);//creates root
            XmlElement root = doc.CreateElement("OTHERGUYS");//maybe  a conditional statement to          change the root to 'OTHERGUYS'
            doc.AppendChild(root);
            XmlElement nextElem = doc.CreateElement("CAR");
            doc.AppendChild(nextElem);
    
            if (log.IsDebugEnabled == true)
            {
                log.Debug(GetType().Name + ".process(): enter - prius=" + process);
            }
            StringBuilder sb = new StringBuilder();
            sb.Append(" select ");
            sb.Append("     'PRIUS' CAR, ");  // 1
            sb.Append("     'PJM' MKT_CD, ");      // 2
            sb.Append("     decode(to_char(lh.time_id-1/24, 'HH24'), '00',  ");
            sb.Append("            to_char(lh.time_id-1, 'YYYYMMDD'), to_char(lh.time_id-1/24, 'YYYYMMDD')) START_DT, ");   // 3
            sb.Append("     decode(to_char(lh.time_id-1/24, 'HH24'), '00',  ");
            sb.Append("            '240000', to_char(lh.time_id-1/24, 'HH24MISS')) START_TIME, "); //4
            sb.Append("     decode(to_char(lh.time_id, 'HH24'), '00',  ");
            sb.Append("            to_char(lh.time_id-1, 'YYYYMMDD'), to_char(lh.time_id, 'YYYYMMDD')) END_DT, ");  // 5
            sb.Append("     decode(to_char(lh.time_id, 'HH24'), '00',  ");
            sb.Append("            '240000', to_char(lh.time_id, 'HH24MISS')) END_TIME,      ");  // 6
            sb.Append("       cars._car_id            TX_PT,     ");  //8
            sb.Append("     lh.data_value TARGET_FD ");  // 12
            sb.Append("from DATABASE.MYTABLE lh,          ");
            sb.Append("     DATABASE.CAR car_id                         ");
            sb.Append("where lh.car_id = unit.car_id         ");
            sb.Append("AND lh.time_id > to_date(?, 'MM/DD/YYYY') ");
            sb.Append("AND lh.time_id <= to_date(?, 'MM/DD/YYYY' ) + 1 ");
            sb.Append("AND lh.atb_data_category = 69  AND lh.data_value <> 0        ");
            sb.Append(" order by ");
            sb.Append("     lh.time_id, lh.car_id ");
    
            sb.ToString();// or something like that 
           myDataLayer.theOtherGuysEntitie nme = new myDataLayer.theOtherGuysEntities(myConnection.getEntityFrameworkConnection(typeof(myDataLayer.theOtherGuysEntities)));
            if (log.IsDebugEnabled == true)
            {
                log.Debug(GetType().Name + ".process(): odb" + odb);
                try
                {
                    DateTime dt = DateTime.ParseExact(processingDate.ToString(), "MM/dd/yyyy hh:mm:ss tt", CultureInfo.InvariantCulture);
                    string s = dt.ToString("dd/M/yyyy");
    
    
    
                }catch(Exception e) {
                    fatal=true;
                    fatalMsg = true;
                    if(log.IsFatalEnabled==true) {
                        log.Fatal(GetType().Name + ".process(): exception", e);
                    }
                    Console.Error.WriteLine("The OtherGuys Failed Dirty Mike is in the Prius with name{}, name{1}, name{2}, name {3}.");
         //Really I am supposed to use LINQ for the querying
        // and then conditionalstatementsthrough my business logic to handle the decoding 
    

    再次感谢!!

1 个答案:

答案 0 :(得分:4)

public static string ToXmlUsingDataContract<T>(T obj)
{
    var dcs = new DataContractSerializer(typeof(T));
    var sb = new StringBuilder();

    using (var writer = XmlWriter.Create(sb))
    {
        dcs.WriteObject(writer, obj);
    }

    return (sb.ToString());
}

只需创建某种数据传输对象,或者直接将Entity对象直接传递给此函数,您将获得有效的,可反序列化的XML。