Frage

Ich habe definiert:

[RdfSerializable]
public class SomeItem
{
   // Unique identificator of the resource
   [ResourceUri]
   public string ID { get; set; }

   [RdfProperty( true )]
   public string SomeData { get; set; }
}

and in some other class: 

[RdfProperty(true)]
public SomeItem[] MyTestProp
{
   get
   {
      return new SomeItem[] { new SomeItem() { ID="1", SomeData="test1" }, new SomeItem() { ID="2", SomeData = "test2" } };
   }
}

Wenn ich versuche, um die Klasse zu serialisieren, dass dieser Brauch „MyTestProp“ enthält und es gab mir die Nachricht:

  

Objektverweis nicht auf eine Set   Instanz eines Objekts.

     

Beschreibung: Eine nicht behandelte Ausnahme   während der Ausführung des aufgetretenen   aktuelle Web-Anfrage. Bitte lesen Sie die   Stack-Trace für weitere Informationen über   der Fehler und wo sie ihren Ursprung in   der Code.

     

Ausnahmedetails:   System.NullReferenceException: Object   Verweis nicht auf eine Instanz eines Set   Objekt.

Bin ich falsch in diesen Eigenschaften definiert, oder gibt es eine spezielle Art und Weise Array benutzerdefinierte Klasse zu definieren? Beachten Sie, dass die Serialisierung Array String zum Beispiel ist mir, dass die Art und Weise nicht abstürzt, aber es funktioniert.

Ganz Quelle:

using System;
using NC3A.SI.Rowlex;

[assembly: Ontology("ROWLEXtest1", "http://www.test.com/MyOntology")]

namespace ROWLEXtest1
{
   [RdfSerializable( HasResourceUri=false )]
   public class Item
   {
      [RdfProperty(true)]
      public string MyProp;
   }

   [RdfSerializable]
   public class AllItems
   {
      [RdfProperty(true)] public string mTitle;

      private int id = new Random().Next(0, 20);

      [ResourceUri]
      public string ResourceUri 
      {
         get { return "This " + id.ToString(); }
      }

      [RdfProperty(false)]
      public Item[] Items;
   }

   class Program
   {
      static void Main(string[] args)
      {
         var item = new AllItems();
         item.mTitle = "Hello World!";
         item.Items = new Item[] { new Item(){ MyProp = "test1" }, new Item(){ MyProp = "test2" } };

         var doc = Rdfizer.Serialize(item);

         System.Console.Out.Write(doc.ToString());
      }
   }
}

Ausnahme ist:

  

System.NullReferenceException war   nicht behandelte Message = "Objektverweis   nicht auf eine Instanz eines Objekts festgelegt.“   Source = "NC3A.SI.Rowlex" Stacktrace:          bei NC3A.SI.Rowlex.RdfPropertyAttribute.ExtractRange (Member   MEMBER, Int32 & minCardinality,   Int32 & maxCardinality)          bei NC3A.SI.Rowlex.RdfPropertyAttribute.ExtractRange (Member   MEMBER)          bei NC3A.SI.Rowlex.Rdfizer.AppendProperty (RdfDocument   doc, Membermember,   RdfPropertyAttribute Attribut, Object   Artikel, String ResourceURI)          bei NC3A.SI.Rowlex.Rdfizer.AppendSingleRdfSerializableObject (RdfDocument   doc, Objekt Artikel)          bei NC3A.SI.Rowlex.Rdfizer.ProcessItem (RdfDocument   doc, Objekt Artikel, String []   rangeTypeUris)          bei NC3A.SI.Rowlex.Rdfizer.ExecuteSerialization (IEnumerable   Objekte)          bei NC3A.SI.Rowlex.Rdfizer.Serialize (IEnumerable   Objekte, Boolean   tolerateUnserializebleObjects)          bei NC3A.SI.Rowlex.Rdfizer.Serialize (Object   Artikel)          bei ROWLEXtest1.Program.Main (String []   args) in   C: \ ROWLEXtest1 \ ROWLEXtest1 \ Program.cs: line   40          bei System.AppDomain._nExecuteAssembly (Assembly   Baugruppe, String [] args)          bei Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly ()          bei System.Threading.ExecutionContext.Run (ExecutionContext   ExecutionContext, Context   Rückruf, Objektzustand)          bei System.Threading.ThreadHelper.ThreadStart ()   Innerexception:

War es hilfreich?

Lösung

Was du getan hast sieht nicht gut aus, aber es ist ein Fehler: RdfProperty Erklärung sollte „false“ für MyTestProp nehmen als MyTestProp kein Datentyp Eigenschaft ist aber Objekteigenschaft (es Objekte zurückgibt und nicht Literale).

Ich bin aber nicht sicher, dass dies die Wurzel des Problems ist. Und selbst wenn es ist, sollten Sie eine ordentliche Fehlermeldung mit aussagekräftigen Text statt albern Nullreferenceexception . Deshalb würde ich gerne mal ausprobieren Ihre Fehler zu reproduzieren und ein Update ggf. liefern. Könnten Sie bitte geben Sie

  • die Klasse und die Dekoration, die die MyTestProp beherbergt,
  • Sie den Code ein, wo Sie diese Klasse instanziiert und
  • Sie den Code für die Serialisierung verwenden.
  • Haben Sie Baugruppenebene Attribute (für Ontologie - Namespace-Mapping) anwenden, geben Sie bitte, dass auch.

Vielleicht könnten Sie halten mich für Ihr Codebeispiel [admin bei rowlex.net] senden.

EDIT: Ich konnte die Ausnahme reproduzieren, es ist ein Fehler in ROWLEX ist. Die feste Version 2.0.1 kann nun aus dem heruntergeladen ROWLEX Website.

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