Domanda

Ho definito:

[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" } };
   }
}

Quando si tenta di serializzare la classe che contiene questa usanza "MyTestProp" e mi ha dato quel messaggio:

  

Il riferimento non impostato a un   istanza di un oggetto.

     

Descrizione: un'eccezione non gestita   durante l'esecuzione del   richiesta Web corrente. Si prega di rivedere la   Analisi dello stack per ulteriori informazioni su   l'errore e dove ha avuto origine in   il codice.

     

Dettagli eccezione:   System.NullReferenceException: Oggetto   riferimento non impostato a un'istanza di un   oggetto.

Mi sbaglio nel definire tali proprietà o c'è un modo speciale per definire array per classe personalizzata? Si noti che la serializzazione array stringa per esempio, non mi si blocca in quel modo, ma si sta lavorando.

Tutta la fonte:

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());
      }
   }
}

L'eccezione è:

  

System.NullReferenceException era   Messaggio gestita = "Oggetto   non impostato a un'istanza di un oggetto."   Source = StackTrace "NC3A.SI.Rowlex":          a NC3A.SI.Rowlex.RdfPropertyAttribute.ExtractRange (MemberInfo   MemberInfo, Int32 & minCardinality,   Int32 & maxCardinality)          a NC3A.SI.Rowlex.RdfPropertyAttribute.ExtractRange (MemberInfo   MemberInfo)          a NC3A.SI.Rowlex.Rdfizer.AppendProperty (RdfDocument   doc, MemberInfo MemberInfo,   attributo RdfPropertyAttribute, Object   oggetto, String ResourceURI)          a NC3A.SI.Rowlex.Rdfizer.AppendSingleRdfSerializableObject (RdfDocument   doc, oggetto Object)          a NC3A.SI.Rowlex.Rdfizer.ProcessItem (RdfDocument   doc, oggetto oggetto, String []   rangeTypeUris)          a NC3A.SI.Rowlex.Rdfizer.ExecuteSerialization (IEnumerable   oggetti)          a NC3A.SI.Rowlex.Rdfizer.Serialize (IEnumerable   oggetti, booleano   tolerateUnserializebleObjects)          a NC3A.SI.Rowlex.Rdfizer.Serialize (Object   articolo)          a ROWLEXtest1.Program.Main (String []   args) in   C: \ ROWLEXtest1 \ ROWLEXtest1 \ Program.cs: linea   40          a System.AppDomain._nExecuteAssembly (Assemblea   montaggio, String [] args)          a Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly ()          a System.Threading.ExecutionContext.Run (ExecutionContext   ExecutionContext, ContextCallback   callback, Object state)          a System.Threading.ThreadHelper.ThreadStart ()   InnerException:

È stato utile?

Soluzione

Quello che hai fatto sembra OK ma c'è un errore: Dichiarazione RdfProperty dovrebbe prendere "false" per MyTestProp come MyTestProp non è una proprietà tipo di dati, ma proprietà di un oggetto (restituisce oggetti e non letterali).

Tuttavia, non sono sicuro che questa è la radice del problema. E anche se lo fosse, si dovrebbe ottenere un messaggio di errore decente con testo significativo, invece di sciocco NullReferenceException . Pertanto, vorrei tentare di riprodurre il vostro errore e di fornire una correzione, se applicabile. La prego, specificare

  • la classe e la sua decorazione che ospita il MyTestProp,
  • del codice in cui si crea un'istanza di quella classe, e
  • il codice che si utilizza per per la serializzazione.
  • Se aveste applicare gli attributi a livello di montaggio (per l'ontologia - la mappatura dello spazio dei nomi), si prega di indicare anche quello.

Forse si potrebbe prendere in considerazione l'invio di me il tuo esempio di codice a [admin a rowlex.net].

EDIT: Potrei riprodurre l'eccezione, si tratta di un bug in ROWLEX. Il 2.0.1 versione fissa ora può scaricare dal ROWLEX sito.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top