2017-04-04 19 views
0

我從OData服務使用Microsoft.OData解析的元數據(ODataLib)版本7如何在版本7中缺少ODataComplexValue時在Microsoft.OData.Core中創建複雜值?

解析ODataModel後,我想對所有聲明的屬性創建樣本值的示例消息。

到目前爲止這麼好。適用於屬性中的原始值,或枚舉和集合值。

爲原始值的一個例子:

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

我想創建像這樣一個複雜的值:

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

然而,ODataComplexValue不會在7版本存在(最新的NuGet發佈)。

我看了一下github:這個類在master分支中,但不在ODatav4-7.x分支中。

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

我如何可以創建複雜的價值?

回答

1

我已經能夠使用OData 7生成複雜的值,但它更像是一種解決方法。

我使用ODataUntypedValue並使用Newtonsoft.Json序列化了自己的複雜對象。

首先,它在發行說明中說ODataComplexValue已被ODataResource所取代。

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

但是,這不能用一個ODataProperty的價值,因爲它不是一個ODataValue。

由於庫不會序列化複雜的價值,這是一個使用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 
    } 
}; 

任何其他解決方案或見解,爲什麼圖書館覺得在這方面如此不一致將不勝感激。

相關問題