Я определил:
[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" } };
}
}
Когда я пытаюсь сериализовать класс, который содержит этот пользовательский «MyTestProp», и он дал мне это сообщение:
Ссылка на объект не установлена на
экземпляр объекта.
Описание: необработанное исключение
произошло во время исполнения
текущий веб-запрос. Пожалуйста, просмотрите
трассировка стека для получения дополнительной информации о
ошибка и откуда она возникла
код.
Сведения об исключении:
System.NullReferenceException: объект
ссылка не установлена на экземпляр
объект.
Я ошибаюсь в определении этих свойств или существует специальный способ определения массива для пользовательского класса? Обратите внимание, что сериализация массива в строку, например, не дает сбоя таким образом, но работает.
Весь источник:
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());
}
}
}
Исключение составляет:
System.NullReferenceException было
необработанное сообщение = "ссылка на объект
не установлен для экземпляра объекта. "
Source = "NC3A.SI.Rowlex" StackTrace:
в 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,
Атрибут RdfPropertyAttribute, Объект
item, String resourceUri)
в NC3A.SI.Rowlex.Rdfizer.AppendSingleRdfSerializableObject (RdfDocument
документ, объект)
в NC3A.SI.Rowlex.Rdfizer.ProcessItem (RdfDocument
документ, объект, строка []
rangeTypeUris)
в NC3A.SI.Rowlex.Rdfizer.ExecuteSerialization (IEnumerable
объекты)
в NC3A.SI.Rowlex.Rdfizer.Serialize (IEnumerable
объекты, логические
tolerateUnserializebleObjects)
в NC3A.SI.Rowlex.Rdfizer.Serialize (Объект
вещь)
на ROWLEXtest1.Program.Main (String []
args) в
C: \ ROWLEXtest1 \ ROWLEXtest1 \ Program.cs: линия
40
в System.AppDomain._nExecuteAssembly (Assembly
сборка, строка [] args)
в Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly ()
в System.Threading.ExecutionContext.Run (ExecutionContext
executeContext, ContextCallback
обратный вызов, состояние объекта)
в System.Threading.ThreadHelper.ThreadStart ()
InnerException: