C# 使用带有DataAnnotation的可移植类库共享程序集

C# 使用带有DataAnnotation的可移植类库共享程序集,c#,asp.net-mvc,windows-phone-8,data-annotations,portable-class-library,C#,Asp.net Mvc,Windows Phone 8,Data Annotations,Portable Class Library,我创建了一个名为DataContracts的可移植类库,其中包含我的项目消息和视图。它包含标准的东西,比如GetStockItemByIDRequest和StockView 问题在于,当我尝试使用System.ComponentModel.DataAnnotations为我的一些视图添加DataAnnotations时 [DataContract] public class StockView { [Required] [DataMember] public Guid S

我创建了一个名为
DataContracts
的可移植类库,其中包含我的项目
消息
视图
。它包含标准的东西,比如
GetStockItemByIDRequest
StockView

问题在于,当我尝试使用
System.ComponentModel.DataAnnotations
为我的一些
视图添加
DataAnnotations

[DataContract]
public class StockView
{
    [Required]
    [DataMember]
    public Guid StockID { get; set; }

    [Required]
    [DataMember]
    public string Name { get; set; }
}
我可以成功地将
System.ComponentModel.DataAnnotations
添加到我的可移植类库项目中,并可以在我的Windows Phone 8应用程序中成功引用它,甚至可以创建我视图的新实例,例如
StockView=new StockView()
在我的Windows Phone应用程序中,但如果我尝试使用
Newtonsoft.Json
System.Net.Http.HttpClient
,方法如下

HttpClient client = new HttpClient();
HttpResponseMessage response = await client.GetAsync("http://myservice.com");
T result = await response.Content.ReadAsAsync<T>();
HttpClient=newhttpclient();
HttpResponseMessage response=await client.GetAsync(“http://myservice.com");
T result=wait response.Content.ReadAsAsync();

T result=wait Newtonsoft.Json.JsonConvert.DeserializeObjectAsync(“{}”);
ie:涉及反序列化的地方

我遇到错误
无法加载文件或程序集'System.ComponentModel.DataAnnotations,Version=2.0.5.0'
。我认为这是因为它似乎不是
System.ComponentModel.DataAnnotations
(但是为什么我可以将它添加为对我的PCL的引用呢?)

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

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

2) 是ASP.NET专用的

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


不幸的是,DataAnnotations当前不可移植。虽然有点复杂,但您可能可以通过在PCL中编写自己的DataAnnotation属性,并为.NET Framework项目创建具有相同名称的程序集来解决这个问题,该程序集将属性类型转发到“真实”版本。有关这方面的更多详细信息,请参阅。

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

基本上可以归结为反直觉地引用silverlight版本的dll,该dll可以位于
C:\ProgramFiles(x86)\Microsoft SDK\silverlight\v4.0\Libraries\Client\System.ComponentModel.DataAnnotations.dll


有关如何构建可移植类库的更多信息,我建议。

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

支持的配置文件:

  • .NET 4.0.3及以上版本
  • Windows应用商店8及更高版本
  • Silverlight 4及以上
最值得注意的是,最新的Windows Phone不受支持(当时为8.1)

请参阅中的完整PCL功能表:

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

有一个图书馆:

:


您的PCL需要以Silverlight 8为目标,否则您将获得多个类定义错误。

自定义属性未处于创建新类实例的过程中。好吧,这很公平,但如何正确避免此问题。当然,其他人也尝试过创建跨项目兼容的可移植类库?为第一个洞察喝彩,但是System.ComponentModel.DataAnnotations不仅仅适用于ASP.NET。它在WPF中也被广泛使用。嗨,Daniel,谢谢你的回答,但似乎有一个可移植版本的DataAnnotations属性可以通过Silverlight程序集引用。微软到底为什么坚持在自己的平台上让这些东西如此模糊?
T result = await Newtonsoft.Json.JsonConvert.DeserializeObjectAsync<T>("{}");
Install-Package Portable.DataAnnotations