Frage

Ich habe eine portable Klassenbibliothek namens erstellt DataContracts das meine Projekte enthält Messages Und Views.Standardsachen wie GetStockItemByIDRequest Und StockView sind darin enthalten.

Das Problem liegt, wenn ich versuche, etwas hinzuzufügen DataAnnotations durch die Nutzung System.ComponentModel.DataAnnotations für einige meiner Views als solche.

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

    [Required]
    [DataMember]
    public string Name { get; set; }
}

Ich kann das erfolgreich hinzufügen System.ComponentModel.DataAnnotations zu meinem Portable Class Library-Projekt hinzufügen und in meiner Windows Phone 8-App erfolgreich darauf verweisen und sogar eine neue Instanz meiner Ansicht als solche erstellen können StockView View = new StockView(); in meiner Windows Phone-App, ABER wenn ich versuche, eines davon zu verwenden Newtonsoft.Json oder System.Net.Http.HttpClient indem man so etwas tut wie

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

ODER

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

dh:wo es um Deserialisierung geht ...

Ich stehe vor dem Fehler Could not load file or assembly 'System.ComponentModel.DataAnnotations, Version=2.0.5.0'.Ich gehe davon aus, dass es daran liegt, dass es nicht so aussieht System.ComponentModel.DataAnnotations wird in Windows Phone 8 unterstützt (Aber warum kann ich es dann als Referenz zu meiner PCL hinzufügen?).

Meine Fragen lauten also: Warum wird dieser Fehler nicht angezeigt, wenn ich direkt eine neue Instanz dieser Klassen erstelle, und zweitens, wie kann ich das umgehen?

War es hilfreich?

Lösung 2

OK, es stellt sich heraus, dass meine ursprünglichen Annahmen völlig falsch waren.Sie können sich auf jeden Fall darauf beziehen System.ComponentModel.DataAnnotations Namespace aus einem Windows Phone 8-Projekt.

Im Grunde kommt es darauf an, kontraintuitiv auf die Silverlight-Version der DLL zu verweisen, in der sich befinden kann C:\Program Files (x86)\Microsoft SDKs\Silverlight\v4.0\Libraries\Client\System.ComponentModel.DataAnnotations.dll

Für weitere Informationen zum Erstellen portabler Klassenbibliotheken schlage ich vor unter Bezugnahme auf diesen Artikel .

Andere Tipps

Leider ist DataAnnotations derzeit nicht portierbar.Obwohl es etwas kompliziert ist, können Sie das wahrscheinlich umgehen, indem Sie Ihre eigenen DataAnnotation-Attribute in eine PCL schreiben und eine Assembly mit demselben Namen für .NET Framework-Projekte erstellen, die die Attribute per Typweiterleitung an die „echten“ Versionen weiterleitet.Sehen diese Antwort für weitere Einzelheiten hierzu.

Datenanmerkungen werden in bestimmten PCL-Profilen unterstützt.

Unterstützte Profile:

  • .NET 4.0.3 und höher
  • Windows Store 8 und höher
  • Silverlight 4 und höher

Insbesondere wird das neueste Windows Phone (damals 8.1) nicht unterstützt.

Die vollständige PCL-Funktionstabelle finden Sie unter:http://msdn.microsoft.com/en-us/library/gg597391%28v=vs.110%29.aspx

1) Beim Erstellen einer neuen Klasseninstanz werden keine benutzerdefinierten Attribute gelesen, die durch Reflektion geladen werden.

2) Die System.ComponentModel.DataAnnotations ist exklusiv für ASP.NET

Der Namespace von System.comPonentModel.Dataannotations enthält Attributklassen, mit denen Metadaten für ASP.NET -MVC- und ASP.NET -Datensteuerelemente definiert werden.

Die portable Version von System.ComponentModel.DataAnnotations scheint unvollständig zu sein (z. B. kein MaxLengthAttribute).

Es gibt diese Bibliothek:

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

Install-Package Portable.DataAnnotations

Ihre PCL muss auf Silverlight 8 ausgerichtet sein, andernfalls erhalten Sie mehrere Klassendefinitionsfehler.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top