gpt4 book ai didi

c# - 使用 ASP.Net MVC 5 和 Web API 2.0 在 OData 中进行 Dictionary 序列化

转载 作者:行者123 更新时间:2023-11-30 13:57:44 26 4
gpt4 key购买 nike

我在 MVC 5 的新 Web API 上使用 OData 服务,但遇到了一些问题。

我关注了this tutorial开始开发 OData 服务,几乎一切正常。项目已构建,路由有效,URL 运行良好。

我的一门课叫做 Post并拥有 Dictionary<string, object> 类型的属性名为 Parameters ,如下所示:

public partial class Post : IPost
{
public Guid Id { get; set; }

public string Author{ get; set; }
public string Content{ get; set; }
public DateTime PostedDate{ get; set; }
public List<Photo> Pictures { get; set; }

public Dictionary<string, object> Parameters { get; set; }
}

列出所有 Post 的 URL当我在浏览器中执行获取请求时,对象 ( http://localhost/odata/Posts) 工作正常。所有对象都成功序列化。

但是当我得到 Post 的列表时,将 OData 元数据作为服务引用导入到另一个应用程序中实体,我收到以下错误:

An exception of type 'System.InvalidOperationException' occurred in Microsoft.Data.OData.dll but was not handled in user code

Additional information: The type 'WebApplication1.ServiceReference2.System.Collections.Generic.KeyValuePair_2OfString_Object' has no settable properties.

如何成功解决导入服务引用的这个问题?

最佳答案

几天后,我尝试了很多不同的测试。

  • Dictionary<string, object> => 抛出原始错误
  • Dictionary<string, string> =>同样的错误
  • List<KeyValuePair<string, object>> =>同样的错误
  • List<KeyValuePair<string, string>> =>同样的错误

我意识到 KeyValuePair类是问题,但我不知道为什么。

因此,我创建了一个名为 Parameter 的类如下所示:

public class Parameter
{
public string Key { get; set; }
public string Value { get; set; }
}

...我将列表类型更改为 List<Parameter>它奏效了!

问题经过深思熟虑,我意识到错误中的一个重要句子:

'WebApplication1.ServiceReference2.System.Collections.Generic.KeyValuePair_2OfString_Object' has no settable properties

字典只不过是 KeyValue 对的列表,以及 KeyValuePair<TKey, TValue> struct 有两个属性,名为“Key”和“Value”,它们只有 get 访问器。因此,它们是只读的。

我们可能会得出结论,OData 服务引用无法反序列化只读属性,出于某种我还不知道的原因。

我的解决方法奏效了,但我想知道服务引用是否有朝一日可以通过反射方式来设置此属性。

关于c# - 使用 ASP.Net MVC 5 和 Web API 2.0 在 OData 中进行 Dictionary<string, object> 序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19869819/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com