2013-12-20 56 views
0

我有很多類,但我想通過XML捕獲發送和接收的信息......問題是我不想在每次捕獲XML文檔時創建一個Serializer ,所以我要問你,如果有人知道如何包裝類類型爲typeof運算()使用自定義類捕獲XML

我試着去創建工作是這樣的一個功能:

public void createXML(string fileName, string route) 
    { 
     System.Xml.Serialization.XmlSerializer serializador = new System.Xml.Serialization.XmlSerializer(typeof(THIS IS WHAT I WANNA CHANGE TO A VARIABLE PARAMETER)); 
     System.IO.FileStream stream = new System.IO.FileStream(@""+ route + fileName + ".xml", System.IO.FileMode.Create); 
    } 

所以我想要做的就是調用這個函數並在任何需要的時候使用XML,但問題是在TypeOf()命令中,我找不到一種方法來將不同的類放在那裏。

回答

4

使用generics執行此任務。

public void createXML<T>(string fileName, string route) 
    { 
     System.Xml.Serialization.XmlSerializer serializador = new System.Xml.Serialization.XmlSerializer(typeof(T)); 
     System.IO.FileStream stream = new System.IO.FileStream(@""+ route + fileName + ".xml", System.IO.FileMode.Create); 
    } 
+0

它的工作,但現在不同problema進出口運行,似乎FILESTREAM不會接受...任何意見狂勝IM放置在這個問題上?? ... BTW非常感謝答案:) –

+1

沒問題。路線絕對是正確的格式? '@「」'看起來很奇怪,也許應該是'「@」',或者完全刪除?此外,如果您在路由字符串中使用反斜槓,請檢查它們是否正確轉義(在URL中使用\\,而不是\)。 也可能你需要在'route'和'fileName'之間加一個額外的正斜槓'/',但我不知道如何設置它們。也許這些東西中的一個會起作用。希望這可以幫助。 –

+0

如果我使用反斜槓而不是normalone,它將其標記爲語法錯誤,並且im suppssed放置路由的方式就像這樣@「route/file.xml」...所以我嘗試將路由放到剛剛創建的路由中並把它放在文件名前面加上+這樣的句子@「」+ route +「/」+ filename +「.XML」...這個im試圖在每次使用我的WebService時都得到一個XML文件...試圖讓它變得充滿活力,我只是一直在繼續處理問題,一個接一個......好的是,像你這樣的人一直在幫助我,最後終於週末哈哈......不斷努力解決它。問候。 –

0

好了,我得到這個至今,如果我手動將其路由的工作原理,如果我把一個自定義路線是帶來了一個錯誤信息,說一些關於所提供的路線共振峯心不是承認當年,這是我的代碼......我得到的目錄中,創建它,如果它不存在,然後創建該文件的名稱,但是當我嘗試創建XML,它只是彈出錯誤:

public string[] createDir(string flow, int enclosure, string transaction, string method) 
    { 
     DateTime Hoy = DateTime.Now; 
     libs.Catalogos objCatalogos = new libs.Catalogos(); 
     string day, month, year, hora, min, seg, time, ruta, fileName, name; 
     string[] datos = new string[2]; 
     int existe; 
     name = objCatalogos.convertRecinto(enclosure); 
     day = System.DateTime.Now.ToString("dd"); 
     //day = "13"; 
     month = System.DateTime.Now.ToString("MM"); 
     year = System.DateTime.Now.ToString("yyyy"); 
     hora = System.DateTime.Now.ToString("HH"); 
     min = System.DateTime.Now.ToString("mm"); 
     seg = System.DateTime.Now.ToString("ss"); 
     time = hora + "_" + min + "_" + seg; 
     ruta = @"C:\inetpub\wwwroot\WsDesarrollo2\" + @"XML" + @"\Empresa_" + name + @"\Flujo_" + flow + @"\Año_" + year + @"\Mes_" + month + @"\Dia_" + day + @"\"; 
     existe = verifyDir(ruta); 
     if (existe == 0) 
     { 
      Directory.CreateDirectory(ruta); 
     } 
     fileName = "" + ruta + transaction + "_" + method + "_" + time; 
     datos[0] = ruta; 
     datos[1] = fileName; 
     return datos; 
    } 

    public void createXML<T>(string fileName, string route, T objeto) 
    { 
     System.Xml.Serialization.XmlSerializer serializador = new System.Xml.Serialization.XmlSerializer(typeof(T)); 
     TextWriter tw = new StreamWriter(@"" + route + @"\" + fileName + ".xml"); 
     serializador.Serialize(tw, objeto); 
    } 
0

好球員,我解決了這個問題,我只是想發佈最終結果,以防萬一需要它,這是最終的代碼,我créate一個目錄,或驗證,如果它已經存在,然後créate一個XML任何tib的obj ECT是進入或退出一個Web服務的,所以這是庫:

public class xmlLog 
{ 
    public int verifyDir(string dir) 
    { 
     bool tryDir; 
     tryDir = Directory.Exists(dir); 
     if (tryDir == false) 
     { 
      return 0; 
     } 
     else 
     { 
      return 1; 
     } 
    } 
    public string[] createDir(string flow, int enclosure, string transaction, string method) 
    { 
     DateTime Hoy = DateTime.Now; 
     libs.Catalogos objCatalogos = new libs.Catalogos(); 
     string day, month, year, hora, min, seg, time, ruta, fileName, name; 
     string[] datos = new string[2]; 
     int existe; 
     name = objCatalogos.convertRecinto(enclosure); 
     day = System.DateTime.Now.ToString("dd"); 
     month = System.DateTime.Now.ToString("MM"); 
     year = System.DateTime.Now.ToString("yyyy"); 
     hora = System.DateTime.Now.ToString("HH"); 
     min = System.DateTime.Now.ToString("mm"); 
     seg = System.DateTime.Now.ToString("ss"); 
     time = hora + "_" + min + "_" + seg; 
     ruta = @"C:\inetpub\wwwroot\WsDesarrollo\" + @"XML" + @"\Empresa_" + name + @"\Flujo_" + flow + @"\Año_" + year + @"\Mes_" + month + @"\Dia_" + day + @"\"; 
     existe = verifyDir(ruta); 
     if (existe == 0) 
     { 
      Directory.CreateDirectory(ruta); 
     } 
     fileName = "" + ruta + transaction + "_" + method + "_" + time; 
     datos[0] = ruta; 
     datos[1] = fileName; 
     return datos; 
    } 

    public void createXML<T>(string route, string fileName, T objeto) 
    { 
     string file = Path.Combine(route, fileName + ".xml"); 
     System.Xml.Serialization.XmlSerializer slzr = new System.Xml.Serialization.XmlSerializer(typeof(T)); 
     TextWriter tw = new StreamWriter(file); 
     slzr.Serialize(tw, objeto); 
    } 
} 

在這一切混亂的最後,我成功地創建一個新的目錄和每一個我需要時間創建只有2行代碼的XML他們至極是以下物質:

string[] = objXML.createDir("IN", Convert.ToInt32(recinto), M903In.transaccionAduana, "903"); 
objXML.createXML(paramXML[0], paramXML[1], M903In); 

我知道大家這不會工作,但是這是我設法與合作,creade dinamy路線和文件名對web服務的XML文檔的方式。

希望這可以幫助別人:3