我定义了:

[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版本。

10-05 21:31