ASánchezDíaz

Autoaprendiendo .NET y otras cosas


Error Newtonsoft.Json: Request for the permission of type ‘System.Security.Permissions.ReflectionPermission, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089’ failed.

Hoy un error que, la primera vez que me encontré, me costó un poco superar.

El error se produce con la librería Json.NET de Newtonsoft.

Se trata de una librería para trabajar con Json y .NET.

El mensaje de error se produce al convertir un objeto a Json:

Request for the permission of type ‘System.Security.Permissions.ReflectionPermission, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089’ failed.

La solución (casi siempre) es sencilla. Basta con asegurarse de que el objeto que queremos pasar a Json tiene un constructor vacío.

A continuación, incluyo una clase que provocaba el error al intentar pasarla a Json:

using Newtonsoft.Json;

namespace Contactos.Model
{
    public class Publicacion
    {
        [JsonProperty]
        private int id, idAutor;
        [JsonProperty]
        private long fechaPublicacion;
        [JsonProperty]
        private string texto;
        [JsonProperty]
        private Nombre nombre;

        public Publicacion(int idAutor, Nombre nombre, string texto, long fechaPublicacion)
        {
            this.idAutor = idAutor;
            this.texto = texto;
            this.fechaPublicacion = fechaPublicacion;
            this.nombre = nombre;
        }

        public long getFechaPublicacion()
        {
            return fechaPublicacion;
        }

        public void setFechaPublicacion(long fechaPublicacion)
        {
            this.fechaPublicacion = fechaPublicacion;
        }

        public int getId()
        {
            return id;
        }

        public void setId(int id)
        {
            this.id = id;
        }

        public string getTexto()
        {
            return texto;
        }

        public void setTexto(string texto)
        {
            this.texto = texto;
        }

        public int getIdAutor()
        {
            return idAutor;
        }
    }
}

La clase correcta, con un constructor vacío:

using Newtonsoft.Json;

namespace Contactos.Model
{
    public class Publicacion
    {
        [JsonProperty]
        private int id, idAutor;
        [JsonProperty]
        private long fechaPublicacion;
        [JsonProperty]
        private string texto;
        [JsonProperty]
        private Nombre nombre;

        public Publicacion(int idAutor, Nombre nombre, string texto, long fechaPublicacion)
        {
            this.idAutor = idAutor;
            this.texto = texto;
            this.fechaPublicacion = fechaPublicacion;
            this.nombre = nombre;
        }
        
        public Publicacion()
        {

        }        

        public long getFechaPublicacion()
        {
            return fechaPublicacion;
        }

        public void setFechaPublicacion(long fechaPublicacion)
        {
            this.fechaPublicacion = fechaPublicacion;
        }

        public int getId()
        {
            return id;
        }

        public void setId(int id)
        {
            this.id = id;
        }


        public string getTexto()
        {
            return texto;
        }

        public void setTexto(string texto)
        {
            this.texto = texto;
        }

        public int getIdAutor()
        {
            return idAutor;
        }
    }
}

Saludos.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *