我做了類似Andark的答案的東西,除了我用DataContractSerializer
代替XmlSerializer
。這是在VS 2012中針對.NET 4.5完成的。
下面是測試代碼:
using Sytem;
using System.IO;
using System.Runtime.Serialization;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Person myPerson = new Person() { Name = "Tim" };
using (FileStream writer = new FileStream("Person.xml", FileMode.Create, FileAccess.Write))
{
DataContractSerializer dcs = new DataContractSerializer(typeof(Person));
dcs.WriteObject(writer, myPerson);
}
}
}
[DataContract]
class Person
{
private string m_name;
public string Name
{
get
{
return m_name;
}
set
{
m_name = value;
}
}
}
}
當我運行它,我得到以下XML:
<Person xmlns="http://schemas.datacontract.org/2004/07/ConsoleApplication1"
xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<Name>Tim</Name>
<Person>
這是什麼預期。
需要注意的是爲DataContract
的默認的序列是DataContractSerializer
是很重要的,不XmlSerializer
,並有一定的差異。只有被標記爲[DataMember]
的會員應該被序列化,並且訪問級別(私人,公共等)是不相關的 - 如果您使用[DataMember]
標記私人字段或成員,它將被序列化。
來源
2013-03-28 06:33:21
Tim
可能重複[C#DataContract屬性爲私有字段?](http://stackoverflow.com/questions/8883615/c-sharp-datacontract-attribute-for-private-fields) – Romoku 2013-03-28 02:25:25
DataContrac使用的DataContractSerializer,不XmlSerializer的,除非否則你已經告訴過它。它們是有區別的。 – Tim 2013-03-28 05:59:28
由於'XmlSerializer'和'DataContractSerializer'都給出了預期的答案,是否有可能用'[DataMember]'屬性而不是'Name'裝飾了'm_name'?由於名稱沒有出現在您發佈的XML中,但m_name的確是...... – Tim 2013-03-28 06:39:55