回答
不,你不能這樣做。
XmlSerializer正在使用「退出」進程 - 它會將所有內容(所有公共屬性)序列化,除非您使用[XmlIgnore]
屬性明確選擇禁用。沒有辦法改變這種行爲。
另一方面,.NET 3.5 DataContractSerializer採取另一種方法 - 選擇加入。除非你明確告訴它,否則它不會序列化任何東西,通過用[DataMember]
裝飾你的成員。
所以也許DataContract序列化程序會爲你工作?它還有一些優點(不需要無參數的構造函數,也可以序列化內部和私有屬性,並且它還可以序列化字段而不是屬性,如果需要的話),並且可以根據速度進行調整。還有一些缺點 - 它不支持XML節點中的屬性 - 所以您必須根據您的要求進行選擇。
有一個很好的比較Dan Rigsby - 檢查出來!
Marc
製造或破壞因素可能是DataContractSerializer不支持XmlAttributeAttribute。 – 2011-01-19 21:23:39
您可以執行IXMLSerializable並確定您想要序列化的內容。 Here是對象序列化的一個例子。查看this SO發佈關於實現IXMLSerializable的正確方法。 Here是IXMLSerializable用於某些集合的示例。
這將是這個樣子:
using System;
using System.Xml;
using System.Xml.Schema;
using System.Xml.Serialization;
namespace ConsoleApplicationCSharp
{
public class ObjectToSerialize : IXmlSerializable
{
public string Value1;
public string Value2;
public string Value3;
public string ValueToSerialize;
public string Value4;
public string Value5;
public ObjectToSerialize() { }
public void WriteXml(System.Xml.XmlWriter writer)
{
writer.WriteElementString("Val", ValueToSerialize);
}
public void ReadXml(System.Xml.XmlReader reader)
{
if (reader.MoveToContent() == XmlNodeType.Element && reader.LocalName == "Event")
{
ValueToSerialize = reader["Val"];
reader.Read();
}
}
public XmlSchema GetSchema() { return (null); }
public static void Main(string[] args)
{
ObjectToSerialize t = new ObjectToSerialize();
t. ValueToSerialize= "Hello";
System.Xml.Serialization.XmlSerializer x = new XmlSerializer(typeof(ObjectToSerialize));
x.Serialize(Console.Out, t);
return;
}
}
}
I thnk writer.WriteFullEndElement();在您的代碼中不需要,因爲您已經使用WriteElementString而不是WriteStartElement。 – Anax 2009-09-30 05:46:22
謝謝,我更新了它。我想我也應該注意到我有點懶,這個類wouldnt xml序列化到任何東西,因爲我沒有任何屬性。讓我們假設我的成員變量是屬性:) – SwDevMan81 2009-09-30 11:32:28
- 1. ServicePointManager.SecurityProtocol .NET 3.5默認
- 2. .NET「默認行結束符」?
- 3. 默認值.NET字典
- 4. .Net Core 2.0默認爲0
- 5. .NET默認值屬性
- 6. .Net和默認設置
- 7. XmlIgnore不工作
- 8. 在Vista上默認安裝.NET Framework嗎?
- 9. asp net mvc默認圖像顯示
- 10. .NET DataSet.GetXml() - 什麼是默認編碼?
- 11. .NET MVC 3驗證默認值ErrorMessageResourceType
- 12. 默認的.NET異常處理程序
- 13. ASP .NET MySql默認設置dateformat
- 14. system.net默認代理c#.Net 4
- 15. 修改默認的.NET 4.0的ClientIDMode
- 16. .Net繼承控件屬性默認值
- 17. 默認.NET運行時版本
- 18. .Net框架4.6.1不默認爲TLS 1.2
- 19. Python3 - 默認值爲type的默認值?
- 20. 在.NET JSON序列化期間忽略字段;類似於[XmlIgnore]?
- 21. MySQL默認與MariaDB默認
- 22. XmlIgnore只在序列化中
- 23. 對於.NET 4.5和.NET 4.5.1,默認啓用TLS 1.1和TLS 1.2
- 24. 默認情況下修改默認命令:默認命令爲
- 25. 默認
- 26. 默認
- 27. 默認
- 28. 默認
- 29. 默認IMarshal實現?
- 30. 默認android.support.v7.app.ActionBar默認標題TextSize
不,沒有辦法做到這一點。爲什麼使用XML序列化?你使用的是什麼版本的.NET? – 2009-09-30 01:29:45
.NET 3.5。我使用XML文件來描述遊戲中的過場動畫。我希望將這些XML文件反序列化爲相應的類/對象,以便遊戲引擎可以運行這個過場動畫。在場景編輯器中還將重新序列化。如果有比XML更好的方法,我願意提供建議。 XML + XMLSerializer可以輕鬆修改和調試過場動畫,但也易於在C#代碼中實現和使用。 – morrog 2009-09-30 04:31:14