2012-06-15 14 views
9

OK - Od kilku godzin biję się w moją stronę. Czas poprosić o pomoc.Newtonset json serializer zwraca pusty obiekt

Właśnie zaktualizowałem projekt aplikacji sieci Web do środowiska ASP.NET MVC 4 RC i nowego WebApi. Moja metoda sieci web api zwraca teraz PUSTĄ json "{}" - mimo że mój obiekt jest w pełni wypełniony.

Wymieniłem serializator na mój własny MediaTypeFormatter, który również wywołuje serializator NewtonSoft Json, po to, abym mógł się podłączyć i zobaczyć, jak działa. To, co widzę, to obiekt wchodzący do serializera i wychodzący jako "{}".

Ten UŻYWANY do pracy przed uaktualnieniem.

To jest mój obiekt

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

A ja po prostu wywołanie:

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

wrócę

"{}" 

Co się dzieje ??

[EDIT]

Ktoś mający ten sam problem ... po uruchomieniu za pomocą kodu źródłowego Newtonsoft, widzę, że masz dokładnie ten sam problem z ostatnią zmianą.

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

Odpowiedz

5

Ok - nastąpiły liczne zmiany, które wynikają pewne dość radykalne zmiany wyjścia JSON. Zmiany te obejmują również sposób zastosowania niestandardowych konwerterów TypeConverters.

pisałem podstawową rozpoznawania nazw, które (przynajmniej dla nas) powoduje, że serializer Newtonsoft zachowywać się bardziej jak podstawowy Serializable obiektu serializatora - czyli serializes wszystkich właściwości i zastosowanie niestandardowych TypeConverters robi ...

/// <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; 
    } 
} 

* REJESTRACJA * W swojej MvcApplication „Application_Start” ...

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

Dziękuję, ta odpowiedź pomogła mi obejść mój problem Json.NET serializatora nie szeregowania publicznego właściwości ciągów, które mają pustą wartość ciągu ..... Potrzebuję ich w wynikowym JSON, ponieważ javascript spodziewa się, że właściwości istnieją. –

+0

Co powinienem z tym zrobić? –

+1

Po aktualizacji z danymi rejestracyjnymi. – Adam