2012-06-15 38 views
9

Ok - Tôi đã đánh đầu mình chống lại điều này trong một vài giờ ngay bây giờ. Đã đến lúc yêu cầu giúp đỡ.Newtonsoft json serializer trả về đối tượng rỗng

Tôi vừa nâng cấp dự án ứng dụng Web của mình lên ASP.NET MVC 4 RC và WebApi mới. Phương pháp api web của tôi hiện đang trả về EMPTY json "{}" - mặc dù đối tượng của tôi đã được điền đầy đủ.

Tôi đã thay thế bộ nối tiếp bằng MediaTypeFormatter của riêng mình mà còn gọi trình serializer Newtonsoft Json, vì vậy tôi có thể móc vào và xem mọi thứ hoạt động. Những gì tôi thấy là một đối tượng đi vào serializer, và sắp ra là "{}".

USED này hoạt động trước khi tôi nâng cấp.

Đây là đối tượng của tôi

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

Và tôi chỉ cần gọi:

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

tôi nhận được lại

"{}" 

Whats đang xảy ra ??

[EDIT]

Một người nào khác có cùng một vấn đề ... sau khi chạy qua các mã nguồn Newtonsoft, tôi có thể thấy chúng tôi đang gặp vấn đề chính xác tương tự từ một sự thay đổi gần đây.

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

Trả lời

5

Ok - đã có nhiều thay đổi, mà kết quả là một số thay đổi khá triệt để với sản lượng Json. Những thay đổi này cũng bao gồm cách áp dụng TypeConverters tùy chỉnh.

Tôi đã viết một trình giải quyết cơ bản mà (cho chúng tôi ít nhất) gây serializer Newtonsoft cư xử giống như một serializer đối tượng cơ bản Serializable - tức là serializes tất cả PROPERTIES, và sử dụng doesnt TypeConverters tùy chỉnh ...

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

* ĐĂNG KÝ * trong MvcApplication bạn "Application_Start" ...

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

Cảm ơn bạn, câu trả lời này đã giúp tôi workaround vấn đề của tôi về JSON.NET serializer không serializing công cộng các thuộc tính chuỗi xảy ra để có giá trị chuỗi trống ..... Tôi cần chúng được bao gồm trong JSON kết quả là javascript đang chờ các thuộc tính tồn tại –

+0

Tôi nên làm gì với điều đó? –

+1

Bài đăng được cập nhật với chi tiết đăng ký. – Adam

Các vấn đề liên quan