xml序列化源碼
1. 你好,帶屬性的XML序列化的方法要怎麼寫怎麼去識別 [XmlText]
(Streamstream,objecto,Encodingencoding)
{
if(o==null)
thrownewArgumentNullException("o");
if(encoding==null)
thrownewArgumentNullException("encoding");
XmlSerializerserializer=newXmlSerializer(o.GetType());
XmlWriterSettingssettings=newXmlWriterSettings();
settings.Indent=true;
settings.NewLineChars=" ";
settings.Encoding=encoding;
settings.IndentChars="";
using(XmlWriterwriter=XmlWriter.Create(stream,settings))
{
serializer.Serialize(writer,o);
writer.Close();
}
}
///<summary>
///將一個對象序列化為XML字元串
///</summary>
///<paramname="o">要序列化的對象</param>
///<paramname="encoding">編碼方式</param>
///<returns>序列化產生的XML字元串</returns>
(objecto,Encodingencoding)
{
using(MemoryStreamstream=newMemoryStream())
{
XmlSerializeInternal(stream,o,encoding);
stream.Position=0;
using(StreamReaderreader=newStreamReader(stream,encoding))
{
returnreader.ReadToEnd();
}
}
}
///<summary>
///從XML字元串中反序列化對象
///</summary>
///<typeparamname="T">結果對象類型</typeparam>
///<paramname="s">包含對象的XML字元串</param>
///<paramname="encoding">編碼方式</param>
///<returns>反序列化得到的對象</returns>
publicstaticTXmlDeserialize<T>(strings,Encodingencoding)
{
if(string.IsNullOrEmpty(s))
thrownewArgumentNullException("s");
if(encoding==null)
thrownewArgumentNullException("encoding");
XmlSerializermySerializer=newXmlSerializer(typeof(T));
using(MemoryStreamms=newMemoryStream(encoding.GetBytes(s)))
{
using(StreamReadersr=newStreamReader(ms,encoding))
{
return(T)mySerializer.Deserialize(sr);
}
}
}
這是幫助類的代碼
2. 求 一個 xml反序列化的源代碼,xml為3層機構,即節點下有很多元素,元素又有屬性。
xml反序列化是指轉換成業務對象么?如果是,你業務對象是什麼樣的啊?然後要的是專門正對這個xml的代碼吧?
<Root>
<student>
<Id>1</Id>
<phone>2132154654</phone>
<phone>123215458</phone>
</student>
<student>
<Id>2</Id>
<phone>2132154654</phone>
</student>
</Root>
大概的XML是這樣么?
3. 關於XML序列化求助
根據你提供的XML,創建三個類,然後再利用一樓的方法把這個XML文件反序化成MyData類。高手這兩個字我受不起,希望有更牛X的人來...
[Serializable]
public class something
{
pubilc int id {get;set;}
public string name{get;set;}
}
[Serializable]
public class MyFile
{
[xmlAttribute("name")]
pubilc string name{get;set;}
[xmlAttribute("size")]
pulic string size{get;set;}
[xmlElement("file")]
public List<something> listSomething{get;set;}
}
[Serializable]
[xmlRoot("data")]
pubilc class MyData
{
[xmlArray("files")]
[xmlArrayItem(file)]
public List<MyFile>ListMyfile{get;set;}
}
4. C#xml序列化
給你個思路,用反射(System.Reflection命名空間)來讀出對象中所有的屬性,然後用XmlDocument類讀取XML
5. 如何在C 實現自定義XML序列化問題,怎麼解決
對於字元串,你有一些選擇;xml可以簡單地用 XmlSerializer ( 或者 DataContractSerializer,但它提供了對xml的更少控制) 或者 JSON (JSON.net, 等來完成。
XmlSerializer的典型類看起來很簡單:
public class Apple {
public string Variety {get;set;}
public decimal Weight {get;set;}//etc}
( 注意我也希望上面的Json.NET 也能工作)
上面的類還應該在數據綁定場景中工作良好,這是由於。
你將序列化:
Apple obj = new Apple { Variety ="Cox", Weight = 12.1M};
XmlSerializer ser = new XmlSerializer(typeof(Apple));
StringWriter sw = new StringWriter();
ser.Serialize(sw, obj);
string xml = sw.ToString();
StringReader sr = new StringReader(xml);
Apple obj2 = (Apple)ser.Deserialize(sr);
但是你可以自定義 xml:
[XmlType("apple"), XmlRoot("apple")]public class Apple {
[XmlAttribute("variety")]
public string Variety {get;set;}
[XmlAttribute("weight")]
public decimal Weight {get;set;}//etc}
DataContractSerializer 是最理想的,更喜歡:
[DataContract]public class Apple {
[DataMember]
public string Variety {get;set;}
[DataMember]
public decimal Weight {get;set;}}
6. C# .Net Xml序列化與反序列化問題:Xml節點是動態的,不確定的,怎麼構建實體類對Xml進行(反)序列化
你是要控制序列化後xml文件嗎?正常情況下不需要控制序列化後的結果,否則需要實現IXmlSerializable介面,我實現過,很麻煩。
7. 對資料庫進行XML序列化
// Create the connection.
string constr = "User Id=scott;Password=tiger;Data Source=oracle";
OracleConnection con = new OracleConnection(constr);
con.Open();
// Create the command.
OracleCommand cmd = con.CreateCommand();
// Set the XML command type to query.
cmd.XmlCommandType = OracleXmlCommandType.Query;
// Change the SQL query, and set the maximum number of rows to 2.
cmd.CommandText = "select * from emp e";
// Set the XML query properties.
cmd.XmlQueryProperties.MaxRows = 2;
cmd.XmlQueryProperties.RootTag = "ROWSET";
cmd.XmlQueryProperties.RowTag = "ROW";
Stream stream = cmd.ExecuteStream();
// 將這個Stream寫到XML文件里就可以了,這步相信對你來說很容易
8. C#中的xml序列化過程(詳細的例子)
要序列化的對象:
[Serializable]
public class Person
{
public string Name{get;set;}
public int Age{get;set;}
}
實例化一個對象:
Person p = new Person();
p.Name="張三";
p.Age=18;
序列化:
Type typePer = p.GetType();
XmlSerializer xmlSer = new XmlSerializer(typePer);
using (FileStream fs = new FileStream("person.xml", FileMode.Create))
{
xmlSer.Serialize(fs, p);
}
也可以序列化一個LIST集合:
List lps = new List();
lps.Add(對象);
lps.Add(對象);
......
XmlSerializer x = new XmlSerializer(lps.GetType());
using (FileStream fs = new FileStream(@"D:\per.xml", FileMode.Create, FileAccess.Write))
{
x.Serialize(fs, lps);
}
9. c#xml序列化時,怎麼設置xml的編碼,我要設置為GBK編碼
請問樓主是如何把你的XML文檔改成UTF-8編碼的?
除了把XML文件中最開始的那個聲明變成 <?xml version="1.0" encoding="utf-8"?> 之外,還需要把這個XML文件本身另存為UTF-8的編碼方式(在VisualStudio裡面選擇另存為,在「保存」按鈕的右邊有個向下小箭頭,點開後選擇UTF-8)。不知樓主說的「高級頁面設置」是什麼?指的是「文件 - 高級保存選項」嗎?
此外,請問樓主的代碼是如何讀取這個XML的?是怎麼失敗的?拋出什麼異常了?
10. 寫出這個類對象XML序列化函數serialize
先將Solidworks中畫好的裝配體另存為.x_t的類型,如下圖所示,而且文件名一定要是英文的。
打開ADAMS,選擇Improt a file,然後在下面的Start in中找到你剛才保存的文件,要注意的是保存的路徑也要是英文的,比如保存在D盤的adams中,如下圖所示。
點擊OK按鈕,在彈出的對話框中按照下圖所示操作:在File Type中選擇Parasolid 開通的,在File To Read 中將滑鼠放在其對話框中,點擊右鍵,選擇Browse 找到你命名.x_t的文件;最後一行左邊,如果你是裝配體就選擇 Modle Name,如果是零件就選擇Part Name,在右邊同第二行一樣,點擊滑鼠右鍵,選擇create 然後在新彈出的對話框中輸入你想重新命的名字。要注意,一定不能直接輸入名字,否則最後在ADAMS中顯示不出來。
點擊OK按鈕,出現的圖如果是純線條的框圖,如下圖所示,那麼如何改為實體圖呢?
點擊右邊所示的工具條的最左下端的Render 便會出現所想要的實體圖形,如下圖所示。