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