2017-04-04 6 views
0

私はODataModelを解析した後Microsoft.OData(ODataLib)バージョン7バージョン7でODataComplexValueが見つからない場合、Microsoft.OData.Coreに複雑な値を作成するにはどうすればよいですか?

を使用したODataサービスからメタデータを解析しています、私は宣言されたすべてのプロパティのサンプル値とのメッセージ例を作成したいです。

これまでのところとても良いです。プロパティのプリミティブな値、または列挙型およびコレクション値のプリミティブな値を処理します。

プリミティブ値の例:

var property = new ODataProperty() { 
    Name = "Key", 
    Value = new ODataComplexValue() { 
     Properties = new List<ODataProperty>() { 
     new ODataPrimitiveValue("Value") 
     } 
    } 
}; 

しかし、ODataComplexValueは、バージョン7に存在しません:

var property = new ODataProperty() { 
    Name = "Key", 
    Value = new ODataPrimitiveValue("Value") 
}; 

が、私はそうのような複雑な値を作成したいです(最新のNuGetリリース)。

私はgithubを見ました。クラスはマスターブランチにありますが、ODatav4-7.xブランチにはありません。

https://github.com/OData/odata.net/tree/master/src/Microsoft.OData.Core

どのように私は、複雑な値を作成することができますか?

答えて

1

私はOData 7と複雑な値を生成できましたが、これは回避策のように感じられます。

ODataUntypedValueを使用して、Newtonsoft.Jsonを使用して複合オブジェクトを自分でシリアル化しました。

まず、リリースノートでは、ODataComplexValueがODataResourceに置き換えられています。それはODataValueではないので

http://odata.github.io/odata.net/v7/#23-17-Merge-Entity-And-Complex-Breaking

しかし、これはODataPropertyの値に使用することはできません。

ライブラリーは、複雑な値をシリアル化しませんように、ここにNewtonsoft.Jsonを使用して明示的に直列化と実装だ:ライブラリは、この点ではとても矛盾に感じている理由として

// propertiesObject is a POCO I've dynamically created using ExpandoObject 
var complexObject = JsonConvert.SerializeObject(propertiesObject); 

var property = new ODataProperty() { 
    Name = "Key" 
    Value = new ODataUntypedValue() { 
    RawValue = complexObject 
    } 
}; 

他のソリューションや洞察非常に高く評価されるだろう。

関連する問題