El atributo [DataMember]
en Unity se utiliza para marcar propiedades o campos de una clase para que sean serializados cuando se usa DataContractSerializer
, una herramienta de serialización de .NET. Este atributo es útil cuando se trabaja con servicios web, almacenamiento de datos o transmisión de información en formatos como XML y JSON.
En Unity, cuando se usa [DataContract]
y [DataMember]
, se pueden definir estructuras de datos que pueden ser serializadas y deserializadas fácilmente.
[DataContract]
: Se usa para marcar una clase como serializable.
[DataMember]
: Se usa dentro de una clase con [DataContract]
para indicar qué propiedades o campos deben ser serializados.
using System;
using System.Runtime.Serialization;
using System.IO;
using System.Xml;
[DataContract]
public class PlayerData
{
[DataMember]
public string Name { get; set; }
[DataMember]
public int Score { get; set; }
}
public class Example
{
public static void Main()
{
PlayerData player = new PlayerData { Name = "Alice", Score = 100 };
// Serialización
DataContractSerializer serializer = new DataContractSerializer(typeof(PlayerData));
using (MemoryStream stream = new MemoryStream())
{
serializer.WriteObject(stream, player);
stream.Position = 0;
StreamReader reader = new StreamReader(stream);
Console.WriteLine("XML Serializado:");
Console.WriteLine(reader.ReadToEnd());
}
}
}
[DataMember]
Parámetro | Descripción |
---|---|
Name
|
Define un nombre personalizado para el campo en la serialización. |
Order
|
Define el orden de los elementos en la serialización. |
IsRequired
|
Indica si el campo es obligatorio en la deserialización. |
EmitDefaultValue
|
Si es false , no serializa valores por defecto (ejemplo: null , 0 , false ).
|
Ejemplo con parámetros:
[DataMember(Name = "player_score", Order = 2, IsRequired = true, EmitDefaultValue = false)]
public int Score { get; set; }
Este código deserializa un objeto desde una cadena XML:
string xmlData = "<PlayerData><Name>Alice</Name><Score>100</Score></PlayerData>";
using (StringReader stringReader = new StringReader(xmlData))
using (XmlReader xmlReader = XmlReader.Create(stringReader))
{
DataContractSerializer serializer = new DataContractSerializer(typeof(PlayerData));
PlayerData deserializedPlayer = (PlayerData)serializer.ReadObject(xmlReader);
Console.WriteLine($"Nombre: {deserializedPlayer.Name}, Puntuación: {deserializedPlayer.Score}");
}
Jorge García
Fullstack developer