2012-09-29 36 views
7

Hãy tưởng tượng một hành động điều khiển đơn giản IEnumerable<BaseType> Get(). Nó trả về một liệt kê các kiểu khác nhau bắt nguồn từ BaseType.Thừa kế và trình định dạng JSON của ASP.NET Web API

Khi khách hàng yêu cầu XML, kết quả là một cái gì đó như thế này:

<ArrayOfBaseType> 
    <BaseType i:type="DerivedType1"><A>value</A></BaseType> 
    <BaseType i:type="DerivedType2"><B>value</B></BaseType> 
    <BaseType i:type="DerivedType3"><C>value</C></BaseType> 
</ArrayOfBaseType> 

Như bạn có thể thấy, các loại lớp có nguồn gốc được truyền đi trong các thuộc tính i:type.

Nếu khách hàng yêu cầu JSON Tuy nhiên, thông tin này là mất tích:

[ 
    {"A":"value"}, 
    {"B":"value"}, 
    {"C":"value"} 
] 

Làm thế nào để sửa lỗi này?

+3

@downvoter: Không có giải thích, downvote của bạn không đáng giá vì tôi không thể cải thiện câu hỏi mà không biết điều gì không rõ ràng. –

Trả lời

4

Sự thay đổi sau đây là cần thiết:

Trong WebApiConfig.cs dòng sau cần phải được thêm :

config.Formatters.JsonFormatter.SerializerSettings.TypeNameHandling = 
    TypeNameHandling.Auto; 

Điều này sẽ tự động dẫn đến thuộc tính mới $type khi cần.

0

Nếu bạn viết lớp học của bạn như sau:

public class MyClass 
{ 
    // properties here 

    public string IType 
    { 
     get 
     { 
      return this.GetType().Name; 
     } 

     set { } 
    } 
} 

Có lẽ, nó sẽ giúp bạn

+0

Không thực sự. Trong mắt tôi là một hack. –

+0

Tôi không chắc chắn với json tồn tại một cách khác. – Khurshid

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