Si trato de serializar un objeto de la siguiente ClassToSerialize clase con el Sistema.En tiempo de ejecución.La serialización.Json.DataContractJsonSerializer

[DataContract,Serializable]
public class ClassToSerialize
{
    [NonSerialized] private bool _mf;
    public bool IsMf
    { 
        get { return _mf};
        set{ _mf = value;} 
    }

    [DataMember]
    public char PrimaryExc { get; set; }        
}

public class TestClass
{
    ClassToSerialize obj = new ClassToSerialize{PrimaryExchange = 'a', NoResults = true};
    var serializer = new System.Runtime.Serialization.Json.DataContractJsonSerializer(ClassToSerialize);
    var ms = new MemoryStream();
    serializer.WriteObject(ms, obj);
    return Encoding.UTF8.GetString(ms.ToArray());
}

La cadena que devuelve todavía contiene IsMf propiedad y su valor. El NOnSerialized atributo es ignorado. Por favor alguien puede sugerir qué atributo a utilizar cuando DataContractJsonSerializer para no serializar algunas propiedades

InformationsquelleAutor labroo | 2010-11-20

2 Comentarios

  1. 4

    El siguiente código funcionó para mí (es casi idéntica a la tuya con un par de pequeños errores de compilación fijo):

    using System;
    using System.IO;
    using System.Runtime.Serialization;
    using System.Runtime.Serialization.Json;
    using System.Text;
    
    class Program
    {
        static void Main()
        {
            var obj = new ClassToSerialize
            {
                PrimaryExc = 'a', 
                NoResults = true
            };
    
            var serializer 
                = new DataContractJsonSerializer(typeof(ClassToSerialize));
    
            var ms = new MemoryStream();
    
            serializer.WriteObject(ms, obj);
    
            Console.WriteLine(Encoding.UTF8.GetString(ms.ToArray()));
        }
    }
    
    [DataContract]
    [Serializable]
    public class ClassToSerialize
    {
        [NonSerialized]
        private bool _mf;
    
        public bool IsMf
        {
            get { return _mf; }
            set { _mf = value; }
        }
    
        [DataMember]
        public bool NoResults { get; set; }
    
        [DataMember]
        public char PrimaryExc { get; set; }
    }

    De salida:

    {"NoResults":true,"PrimaryExc":"a"}

    • Yo upvoted Darin respuesta del porque es más precisa y completa y votada abajo de este, porque es engañoso. Sólo los miembros que están marcados con [DataMember] se serializan los otros no lo son. No hay necesidad de [NonSerialized], que es como se dio cuenta de que se omite.
  2. 2

    No, no la contienen. Usted debe ser confundido:

    [DataContract]
    public class ClassToSerialize
    {
        [NonSerialized] 
        private bool _mf;
        public bool IsMf
        {
            get { return _mf; }
            set{ _mf = value;}  
        }
    
        [DataMember]
        public char PrimaryExc { get; set; }        
    }
    
    class Program
    {
        static void Main()
        {
            var obj = new ClassToSerialize 
            {
                PrimaryExc = 'a', 
                IsMf = false
            };
            var serializer = new DataContractJsonSerializer(obj.GetType());
            serializer.WriteObject(Console.OpenStandardOutput(), obj);
        }
    }

    De salida:

    {"PrimaryExc":"a"}

    Observación: no es necesario Que el [Serializable] atributo en la clase. Eso es sólo para la serialización binaria.

Dejar respuesta

Please enter your comment!
Please enter your name here