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