2012-09-29 49 views
7

想象一下簡單的控制器操作IEnumerable<BaseType> Get()。它返回所有派生自BaseType的不同類型的枚舉。繼承和ASP.NET Web API的JSON格式化程序

當客戶端請求XML,結果是這樣的:

<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> 

正如你所看到的,派生類的類型在i:type屬性傳遞。

如果客戶端請求但是JSON,此信息丟失:

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

如何解決這一問題?

+3

@downvoter:沒有一個解釋,你的downvote是沒有價值的,因爲我不能改善這個問題,不知道什麼是不明確的。 –

回答

4

下面的改變是必要的:

在下面的行需要添加的WebApiConfig.cs :

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

這將自動導致一個新的屬性$type需要時。

0

如果你寫你的類如下:

public class MyClass 
{ 
    // properties here 

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

     set { } 
    } 
} 

也許,它會幫助你

+0

不是。在我看來,這是一個黑客。 –

+0

我不確定json是否存在另一種方式。 – Khurshid