Mit RdfProperty von Array zu benutzerdefinierten Klasse
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:
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.