使用带有DataAnnotations的可移植类库共享程序集

时间:2013-11-18 18:27:39

标签: c# asp.net-mvc windows-phone-8 data-annotations portable-class-library

我创建了一个名为DataContracts的可移植类库,其中包含我的项目MessagesViews。其中包含GetStockItemByIDRequestStockView等标准内容。

当我尝试使用DataAnnotationsSystem.ComponentModel.DataAnnotations部分Views添加[DataContract] public class StockView { [Required] [DataMember] public Guid StockID { get; set; } [Required] [DataMember] public string Name { get; set; } } 时,问题就在于此。

System.ComponentModel.DataAnnotations

我可以成功将StockView View = new StockView();添加到我的可移植类库项目中,并且可以在我的Windows Phone 8应用程序中成功引用它,甚至可以在我的Windows中创建我的视图的新实例Newtonsoft.Json电话应用程序但是如果我尝试使用System.Net.Http.HttpClientHttpClient client = new HttpClient(); HttpResponseMessage response = await client.GetAsync("http://myservice.com"); T result = await response.Content.ReadAsAsync<T>(); 来执行类似

的操作
T result = await Newtonsoft.Json.JsonConvert.DeserializeObjectAsync<T>("{}");

OR

Could not load file or assembly 'System.ComponentModel.DataAnnotations, Version=2.0.5.0'

即:涉及反序列化的地方......

我遇到错误System.ComponentModel.DataAnnotations。我假设是因为它看起来不是{{1}} is supported in Windows Phone 8(但为什么我可以将它添加为我的PCL的参考?)。

所以我的问题是,为什么在我直接创建这些类的新实例时不会调用此错误,其次如何解决此问题?

5 个答案:

答案 0 :(得分:5)

遗憾的是,DataAnnotations目前不具备可移植性。虽然有点复杂,但您可以通过在PCL中编写自己的DataAnnotation属性来解决这个问题,并为.NET Framework项目创建一个具有相同名称的程序集,该类型将属性转换为&#34; real&#34;版本。有关详细信息,请参阅this answer

答案 1 :(得分:5)

好的,事实证明我原来的假设是完全错误的。您绝对可以从Windows Phone 8项目中引用System.ComponentModel.DataAnnotations命名空间。

基本上它归结为反直观地引用可以位于C:\Program Files (x86)\Microsoft SDKs\Silverlight\v4.0\Libraries\Client\System.ComponentModel.DataAnnotations.dll

中的dll的silverlight版本

有关如何构建可移植类库的更多信息,我建议referring to this article

答案 2 :(得分:1)

某些PCL配置文件支持数据注释。

支持的配置文件:

  • .NET 4.0.3及更高版本
  • Windows Store 8及更高版本
  • Silverlight 4及以上

最值得注意的是,不支持最新的Windows Phone(当时为8.1)。

请参阅以下内容中的完整PCL功能表: http://msdn.microsoft.com/en-us/library/gg597391%28v=vs.110%29.aspx

答案 3 :(得分:0)

1)创建新类实例的过程不涉及通过反射加载的读取自定义属性。

2)System.ComponentModel.DataAnnotations是ASP.NET独有的

  

System.ComponentModel.DataAnnotations命名空间提供了属性   用于为ASP.NET MVC和ASP.NET定义元数据的类   数据控制。

答案 4 :(得分:0)

System.ComponentModel.DataAnnotations的可移植版本似乎不完整(例如没有MaxLengthAttribute)。

有这个图书馆:

https://github.com/ryanhorath/PortableDataAnnotations

Install-Package Portable.DataAnnotations

您的PCL需要定位Silverlight 8,否则会出现多个类定义错误。