Volver a la página principal
miércoles 19 marzo 2025
0

Cómo usar [DataMember] en Unity

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.

Ejemplo básico de uso

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());
        }
    }
}

Parámetros del atributo [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; }

Ejemplo práctico con deserialización

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}");
}
Etiquetas:
csharp
Compartir:
Creado por:
Author photo

Jorge García

Fullstack developer