我定义了:
[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”的类时,它给了我该消息:
对象引用未设置为
对象的实例。
说明:未处理的异常
发生在执行
当前的Web请求。请检查
有关更多信息的堆栈跟踪
错误及其起源
代码。
异常详细信息:
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属性,对象
项目,字符串resourceUri)
在NC3A.SI.Rowlex.Rdfizer.AppendSingleRdfSerializableObject(RdfDocument
doc,对象项)
在NC3A.SI.Rowlex.Rdfizer.ProcessItem(RdfDocument
doc,对象项,字符串[]
rangeTypeUris)
在NC3A.SI.Rowlex.Rdfizer.ExecuteSerialization(IEnumerable
对象)
在NC3A.SI.Rowlex.Rdfizer.Serialize(IEnumerable
对象,布尔
tolerateUnserializebleObjects)
在NC3A.SI.Rowlex.Rdfizer.Serialize(Object
项目)
在ROWLEXtest1.Program.Main(String []
args)在
C:\ ROWLEXtest1 \ ROWLEXtest1 \ Program.cs:line
40
在System.AppDomain._nExecuteAssembly(Assembly
程序集,String []参数)
在Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
在System.Threading.ExecutionContext.Run(ExecutionContext
executionContext,ContextCallback
回调,对象状态)
在System.Threading.ThreadHelper.ThreadStart()
InnerException:
最佳答案
您所做的看起来不错,但有一个错误:
对于MyTestProp,RdfProperty声明应为“ false”,因为MyTestProp不是数据类型属性,而是对象属性(它返回对象而不是文字)。
但是,我不确定这是否是您问题的根源。即使是,您也应该得到a decent error message with meaningful text instead of silly NullReferenceException。因此,我想尝试重现您的错误并提供适用的修复程序。请您指定
托管MyTestProp的类及其修饰,
实例化该类的代码,以及
用于序列化的代码。
如果您应用了程序集级别的属性(用于本体-名称空间映射),请也指出这一点。
也许您可以考虑将您的代码示例发送给我[rowlex.net的管理员]。
编辑:
我可以重现异常,这是ROWLEX中的错误。现在可以从ROWLEX站点下载固定的2.0.1版本。