我定义了:
[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:Object 引用未设置为的实例 对象
我在定义这些属性时是错误的,还是有一种特殊的方法可以将数组定义为自定义类?请注意,例如将数组序列化为字符串并不会让我崩溃,但它正在运行。
整个来源:
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是 未处理的Message =“对象引用 没有设置为对象的实例。“ Source =“NC3A.SI.Rowlex”StackTrace: at NC3A.SI.Rowlex.RdfPropertyAttribute.ExtractRange(MemberInfo) memberInfo,Int32& minCardinality, INT32和放大器; maxCardinality) at NC3A.SI.Rowlex.RdfPropertyAttribute.ExtractRange(MemberInfo) 的MemberInfo) 在NC3A.SI.Rowlex.Rdfizer.AppendProperty(RdfDocument doc,MemberInfo memberInfo, RdfPropertyAttribute属性,Object item,String resourceUri) 在NC3A.SI.Rowlex.Rdfizer.AppendSingleRdfSerializableObject(RdfDocument) doc,Object item) 在NC3A.SI.Rowlex.Rdfizer.ProcessItem(RdfDocument doc,Object item,String [] rangeTypeUris) 在NC3A.SI.Rowlex.Rdfizer.ExecuteSerialization(IEnumerable 对象) 在NC3A.SI.Rowlex.Rdfizer.Serialize(IEnumerable 对象,布尔值 tolerateUnserializebleObjects) 在NC3A.SI.Rowlex.Rdfizer.Serialize(对象 项目) 在ROWLEXtest1.Program.Main(String [] args)in C:\ ROWLEXtest1 \ ROWLEXtest1 \的Program.cs:行 40 在System.AppDomain._nExecuteAssembly(程序集 assembly,String [] args) 在Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly() 在System.Threading.ExecutionContext.Run(ExecutionContext executionContext,ContextCallback 回调,对象状态) 在System.Threading.ThreadHelper.ThreadStart() 的InnerException:
答案 0 :(得分:2)
你做的看起来不错,但有一个错误: 对于MyTestProp,RdfProperty声明应该为“false”,因为MyTestProp不是数据类型属性,而是对象属性(它返回对象而不是文字)。
但是,我不确定这是你问题的根源。即使它是,你应该得到a decent error message with meaningful text instead of silly NullReferenceException。因此,我想尝试重现您的错误并提供修复(如果适用)。可以请你指定
也许您可以考虑将您的代码示例发送给[admin at rowlex.net]。
编辑: 我可以重现异常,它是ROWLEX中的一个错误。 现在可以从ROWLEX网站下载固定的2.0.1版本。