2017-01-11 13 views
4

OData 4で "Open Types"を使用できる動的プロパティを持つCallという名前のクラスで新しいC#OData4 Web APIを作成しています。私はすべてを設定し、それを正しく設定したと信じていますが、シリアル化されたレスポンスには動的プロパティが含まれていません。C#WebAPI動的プロパティが正しくシリアル化されていません

私は何か問題を構成しましたか?

public partial class Call 
{ 
    public int Id { get; set; } 
    public string Email { get; set; } 
    public IDictionary<string, object> DynamicProperties { get; } 
} 

public class CallController : ODataController 
{ 
    [EnableQuery] 
    public IQueryable<Call> GetCall([FromODataUri] int key) 
    { 
     return _context.Call.GetAll(); 
    } 
} 

public static partial class WebApiConfig 
{ 
    public static void Register(HttpConfiguration config) 
    { 
     AllowUriOperations(config); 

     ODataModelBuilder builder = new ODataConventionModelBuilder(); 
     builder.ComplexType<Call>(); 
     var model = builder.GetEdmModel(); 

     config.MapODataServiceRoute(RoutePrefix.OData4, RoutePrefix.OData4, model);  
    } 

    private static void AllowUriOperations(HttpConfiguration config) 
    { 
     config.Count(); 
     config.Filter(); 
     config.OrderBy(); 
     config.Expand(); 
     config.Select(); 
    } 
} 

答えて

0

キーペアの値がnullの場合、プロパティは単純にシリアル化されません。ここでは、ヌル

は、いくつかの追加の例

DynamicProperties.Add("somekey", 1); 

ある "somekey":1

私はそれが

"キー" に連載されるように期待していました


DynamicProperties.Add("somekey", "1"); 

"somekey": "1"


DynamicProperties.Add("somekey", null); 

+0

私はこれを新しい答えに矛盾しなければならない –

0

あなたのメタデータで確認することができ、種類CallにあなたはOpenType="true"がありますか?あなたのメタデータでOpenType="true"を持っている場合、あなたは間違いなくあなたのDynamicPropertiesコレクション

にいくつかのエントリを持っていることを確認し、この

builder.EntitySet<Call>("Calls"); 

builder.ComplexType<Call>(); 

:いない場合は、この行を変更し、それをEntitySetを作ってみます

+0

私はデバッグを行っていますが、辞書のプロパティであることを確認できます。私は両方のオプションをビルダーで試しましたが、どちらも機能しません。クラスは単にクラスであり、XMLでレイアウトされていないので、OpenType = trueをどこで設定できるかはわかりません。あなたはなにか考えはありますか? – JacobVoller

+0

http:// localhost/$ metadataのようなURLにあるメタデータに現れます。 – TomDoesCode

+0

メタデータをどこに設定しても、それを試してみるとエラーページが表示されますか?私はそのデータがどこから来るのか分かりません。 – JacobVoller

0

あなたはオープンタイプの追加により、ODataの中で動的な性質を大切にヌルの直列化を有効にすることができます次の行(WebApiConfig.csのメソッドのRegister(HttpC onfiguration config))

config.Properties.AddOrUpdate("System.Web.OData.NullDynamicPropertyKey", val=>true, (oldVal,newVal)=>true); 

次に、ヌルを持つ動的プロパティのシリアル化が開始されます。

関連する問題