我正在使用 Microsoft.OData (ODataLib) 版本 7 解析来自 OData 服务的元数据。
解析 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")
}
}
};
但是,版本 7 中不存在 ODataComplexValue(最新 NuGet 版本)。
我看了一下github:该类位于master分支中,但不在ODatav4-7.x分支中。
https://github.com/OData/odata.net/tree/master/src/Microsoft.OData.Core
如何创建复杂的值?
最佳答案
我已经能够使用 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
}
};
对于为什么库在这方面感觉如此不一致的任何其他解决方案或见解将不胜感激。
关于c# - 当版本 7 中缺少 ODataComplexValue 时,如何在 Microsoft.OData.Core 中创建复杂值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43209745/