Après l'apprentissage ne sérialisation des propriétés privées dans une classe, je commencé à utiliser DataContract et DataMember annotations.C# - sérialisation propriété privée comme attribut (données contrat)
J'ai une propriété de chaîne privée dans ma classe que je voudrais sérialiser en tant qu'attribut et non en tant qu'élément.
[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;
}
}
}
}
Essayer d'utiliser la DataMember et XmlAttribute annotations ensemble m'a donné cette sortie:
<channel name="NAME">
<TxTime>2017-03-26T13:15:56.8042989+03:00</TxTime>
</channel>
Le résultat que je veux est ce -
<channel name="NAME" txTime="2017-03-26T13:15:56.8042989+03:00" />
La façon dont je sérialisé est en utilisant le XmlSerializer -
using (FileStream fs = new FileStream("channels.txt", FileMode.Create))
{
XmlSerializer serializer = new XmlSerializer(typeof(Channel));
serializer.Serialize(fs, objectName);
}
'XmlSerializer' ne sérialise que les champs et propriétés publics. En outre, si vous souhaitez l'utiliser, vous n'avez pas besoin des attributs DataContract et DataMember car ils sont utilisés par DataContractSerializer. –
'DataContractSerializer' n'utilise pas d'attributs XML. Voir [Comment contrôler la sérialisation .NET DataContract de manière à utiliser les attributs XML au lieu des éléments?] (Http://stackoverflow.com/q/591907/3744182). L'implémentation de 'IXmlSerializable' comme indiqué ci-dessous devrait fonctionner pour les deux sérialiseurs. – dbc