En utilisant la propriété Circ de tableau à la classe personnalisée
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:
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.