Question

J'ai défini:

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

Lorsque je tente de sérialiser la classe qui contient cette coutume « MyTestProp » et il m'a donné ce message:

  

Référence de l'objet non définie à une   instance d'un objet.

     

Description: Une exception non gérée   produite pendant l'exécution de la   demande web actuelle. S'il vous plaît examiner la   Trace de la pile pour plus d'informations sur   l'erreur et son origine dans   le code.

     

Détails de l'exception:   System.NullReferenceException: objet   pas référence à définie à une instance d'un   objet.

Ai-je tort dans la définition de ces propriétés ou il y a une façon particulière pour définir ensemble à la classe personnalisée? Notez que tableau sérialisation à chaîne par exemple ne me plantait de cette façon, mais il fonctionne.

Source entier:

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

Exception est:

  

System.NullReferenceException était   unhandled message = "Référence de l'objet   non définie à une instance d'un objet « .   Source = StackTrace "NC3A.SI.Rowlex":          à NC3A.SI.Rowlex.RdfPropertyAttribute.ExtractRange (MemberInfo   MemberInfo, Int32 & minCardinality,   Int32 & maxCardinality)          à NC3A.SI.Rowlex.RdfPropertyAttribute.ExtractRange (MemberInfo   MemberInfo)          à NC3A.SI.Rowlex.Rdfizer.AppendProperty (RdfDocument   doc, MemberInfo MemberInfo,   attribut RdfPropertyAttribute, objet   article, String ResourceURI)          à NC3A.SI.Rowlex.Rdfizer.AppendSingleRdfSerializableObject (RdfDocument   doc, point d'objet)          à NC3A.SI.Rowlex.Rdfizer.ProcessItem (RdfDocument   doc, item Object, String []   rangeTypeUris)          à NC3A.SI.Rowlex.Rdfizer.ExecuteSerialization (IEnumerable   objets)          à NC3A.SI.Rowlex.Rdfizer.Serialize (IEnumerable   objets, Boolean   tolerateUnserializebleObjects)          à NC3A.SI.Rowlex.Rdfizer.Serialize (Object   article)          à ROWLEXtest1.Program.Main (String []   args) dans   C: \ ROWLEXtest1 \ ROWLEXtest1 \ Program.cs: Ligne   40          à System.AppDomain._nExecuteAssembly (Assemblée   Ensemble, String [] args)          à Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly ()          à System.Threading.ExecutionContext.Run (ExecutionContext   ExecutionContext, ContextCallback   rappel, l'état d'objet)          à System.Threading.ThreadHelper.ThreadStart ()   InnerException:

Était-ce utile?

La solution

Ce que vous avez semble OK mais il y a une erreur: déclaration RdfProperty devrait prendre « false » pour MyTestProp comme MyTestProp est pas une propriété de type de données, mais la propriété de l'objet (il renvoie des objets et non littéraux).

Cependant, je ne suis pas sûr que ce soit la racine de votre problème. Et même si elle est, vous devriez obtenir un message d'erreur décent avec un texte significatif au lieu de idiot NullReferenceException . Par conséquent, je voudrais essayer de reproduire votre erreur et de fournir une solution le cas échéant. Pourriez-vous s'il vous plaît, spécifiez

  • la classe et sa décoration qui héberge le MyTestProp,
  • le code où vous instancier cette classe, et
  • le code que vous utilisez pour la sérialisation.
  • Aviez-vous d'appliquer les attributs de niveau d'assemblage (pour l'ontologie - la cartographie des espaces de noms), s'il vous plaît indiquer que, aussi.

Peut-être que vous pourriez envisager de me envoyer votre exemple de code à [admin à rowlex.net].

EDIT: Je pourrais reproduis l'exception, il est un bogue dans ROWLEX. La version 2.0.1 fixe peut maintenant téléchargé à partir du ROWLEX site.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top