After learning I can't serialize private properties in a class, I started using DataContract and DataMember annotations.
I have a private string property in my class that I would like to serialize as an attribute and not as an element.
[DataContract]
public class Channel
{
private string m_Name = string.Empty;
private DateTime? m_TxTime = null;
[DataMember, XmlAttribute("name")]
public string Name
{
get
{
return m_Name;
}
set
{
m_Name = value;
}
}
public DateTime? TxTime
{
get
{
return m_TxTime;
}
set
{
m_TxTime = value;
}
}
[DataMember, XmlAttribute("txTime")]
private string txTimeForSerialization
{
get
{
if (TxTime.HasValue)
{
return TxTime.Value.ToString("o");
}
else
{
return null;
}
}
}
}
Trying to use the DataMember and XmlAttribute annotations together gave me this output:
<channel name="NAME">
<TxTime>2017-03-26T13:15:56.8042989+03:00</TxTime>
</channel>
The result I want is this -
<channel name="NAME" txTime="2017-03-26T13:15:56.8042989+03:00" />
The way I serialized is by using the XmlSerializer -
using (FileStream fs = new FileStream("channels.txt", FileMode.Create))
{
XmlSerializer serializer = new XmlSerializer(typeof(Channel));
serializer.Serialize(fs, objectName);
}