のDataContractSerializer
代わりにXmlSerializer
. これは、.NET 4.5 をターゲットとする VS 2012 で行われました。
テストコードは次のとおりです。
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]
、シリアル化されます。