c# - 当版本 7 中缺少 ODataComplexValue 时,如何在 Microsoft.OData.Core 中创建复杂值?

标签 c# odata odatalib microsoft-odata

我正在使用 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/

相关文章:

c# - 通过流式传输 json 的某些部分来解析巨大的 OData JSON 以避免 LOH

c# - 是什么导致了 "Subquery returns more than 1 row"错误?

c# - 您如何设置 .NET 开发树?

c# - 使用 UWP TextBox.TextChanging 忽略错误数据

SwiftyJson 解析 oData 响应

rest - OData 版本 2 和 3 的差异

c# - 将 MATLAB 与 C# 集成

azure - 如何在 Microsoft Graph Mail API 上对 $filter 使用 'in' 运算符?

具有复杂类型集合的 C# odata 操作失败