2012-06-15 26 views
9

Ok - He estado golpeando mi cabeza contra esto por unas pocas horas. Es hora de pedir ayuda.El serializador Newtonsoft json devuelve el objeto vacío

Acabo de actualizar mi proyecto de aplicación web a ASP.NET MVC 4 RC y el nuevo WebApi. Mi método de API web ahora está devolviendo EMPTY json "{}" - aunque mi objeto esté completo.

He reemplazado el serializador con mi propio MediaTypeFormatter que también llama al serializador Newtonsoft Json, solo para poder conectarme y ver cómo funcionan las cosas. Lo que veo es un objeto que entra al serializador y sale como "{}".

Esto SE UTILIZA para trabajar antes de actualizar.

Esta es mi objeto

[Serializable] 
public class Parameters 
{ 
    public string ApplicantName { get; set; } 
} 

y yo soy sólo llamar:

var result = JsonConvert.SerializeObject(new Parameters(){ Name = "test" }); 

le regreso

"{}" 

¿Qué está pasando ??

[EDIT]

Alguien más tiene el mismo problema ... después de correr a través del código fuente Newtonsoft, puedo ver que estamos teniendo el mismo problema de un cambio reciente.

http://json.codeplex.com/discussions/357850

Respuesta

5

Ok - ha habido numerosos cambios, que es resultado de algunos cambios bastante radicales en la salida JSON. Estos cambios también incluyen cómo se aplican los TypeConverters personalizados.

He escrito un dispositivo de resolución básica que (al menos para nosotros) hace que el serializador Newtonsoft comportarse más como un objeto Serializable serializador básica - es decir, serializa todas las propiedades y el uso duerma TypeConverters personalizados ...

/// <summary> 
/// A resolver that will serialize all properties, and ignore custom TypeConverter attributes. 
/// </summary> 
public class SerializableContractResolver : Newtonsoft.Json.Serialization.DefaultContractResolver 
{ 
    protected override IList<Newtonsoft.Json.Serialization.JsonProperty> CreateProperties(Type type, MemberSerialization memberSerialization) 
    { 
     var properties = base.CreateProperties(type, memberSerialization); 

     foreach (var p in properties) 
      p.Ignored = false; 

     return properties; 
    } 

    protected override Newtonsoft.Json.Serialization.JsonContract CreateContract(Type objectType) 
    { 
     var contract = base.CreateContract(objectType); 

     if (contract is Newtonsoft.Json.Serialization.JsonStringContract) 
      return CreateObjectContract(objectType); 
     return contract; 
    } 
} 

* * REGISTRO En su MvcApplication "Application_Start" ...

GlobalConfiguration.Configuration.Formatters 
    .JsonFormatter.SerializerSettings.ContractResolver = 
     new SerializableContractResolver() 
     { 
      IgnoreSerializableAttribute = true 
     }; 
+0

Gracias, esta respuesta me ayudó a mi problema solución del problema de JSON.NET serializador no serializar pública cadenas de propiedades que tienen un valor de cadena vacío ... Las necesito incluidas en el JSON resultante, ya que javascript espera que las propiedades existan. –

+0

¿Qué debo hacer con eso? –

+1

Publicación actualizada con los detalles de registro. – Adam

Cuestiones relacionadas