문제

나는 다음과 같은 휴대용 클래스 라이브러리를 만들었습니다. DataContracts 내 프로젝트가 포함된 Messages 그리고 Views.다음과 같은 표준적인 것 GetStockItemByIDRequest 그리고 StockView 그 안에 들어있습니다.

문제는 추가하려고 할 때 발생합니다. DataAnnotations 사용하여 System.ComponentModel.DataAnnotations 내 일부를 위해 Views 그 자체로.

[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 View = 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>();

또는

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

즉:역직렬화가 관련된 곳...

오류가 발생했습니다. Could not load file or assembly 'System.ComponentModel.DataAnnotations, Version=2.0.5.0'.내가 생각하는 것은 그렇게 보이지 않기 때문이다 System.ComponentModel.DataAnnotations Windows Phone 8에서 지원됩니다. (그런데 왜 내 PCL에 대한 참조로 추가할 수 있나요?)

그래서 내 질문은 이러한 클래스의 새 인스턴스를 직접 만들 때 이 오류가 호출되지 않는 이유와 두 번째로 이 문제를 어떻게 해결합니까?입니다.

도움이 되었습니까?

해결책 2

좋아, 그래서 내 원래 가정은 완전히 틀렸다는 것이 밝혀졌습니다.당신은 절대적으로 참조 할 수 있습니다 System.ComponentModel.DataAnnotations Windows Phone 8 프로젝트의 네임스페이스입니다.

기본적으로 이는 다음 위치에 있는 dll의 Silverlight 버전을 반직관적으로 참조하는 것으로 귀결됩니다. C:\Program Files (x86)\Microsoft SDKs\Silverlight\v4.0\Libraries\Client\System.ComponentModel.DataAnnotations.dll

이식 가능한 클래스 라이브러리를 구축하는 방법에 대한 자세한 내용은 제가 제안합니다. 이 글을 참고해서 .

다른 팁

불행히도 DataAnnotations는 현재 이식 가능하지 않습니다.약간 복잡하기는 하지만 PCL에 DataAnnotation 특성을 직접 작성하고 특성을 "실제" 버전으로 형식 전달하는 .NET Framework 프로젝트에 대해 동일한 이름의 어셈블리를 생성하여 이 문제를 해결할 수 있습니다.보다 이 답변 이에 대한 자세한 내용은

데이터 주석은 특정 PCL 프로필에서 지원됩니다.

지원되는 프로필:

  • .NET 4.0.3 이상
  • 윈도우 스토어 8 이상
  • 실버라이트 4 이상

특히 최신 Windows Phone(당시 8.1)은 지원되지 않습니다.

다음에서 전체 PCL 기능 표를 확인하세요.http://msdn.microsoft.com/en-us/library/gg597391%28v=vs.110%29.aspx

1) 새 클래스 인스턴스를 생성하는 프로세스에는 리플렉션에 의해 로드되는 사용자 정의 속성 읽기가 포함되지 않습니다.

2) System.ComponentModel.DataAnnotations ASP.NET 전용입니다.

System.componentModel.DataAnnotations 네임 스페이스는 ASP.NET MVC 및 ASP.NET 데이터 컨트롤의 메타 데이터를 정의하는 데 사용되는 속성 클래스를 제공합니다.

System.ComponentModel.DataAnnotations의 이식 가능한 버전이 불완전한 것 같습니다(예: MaxLengthAttribute 없음).

다음 라이브러리가 있습니다.

https://github.com/ryanhorath/PortableDataAnnotations:

Install-Package Portable.DataAnnotations

PCL은 Silverlight 8을 대상으로 해야 합니다. 그렇지 않으면 여러 클래스 정의 오류가 발생합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top