Pregunta

he definido:

[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" } };
   }
}

Cuando intento para serializar la clase que contiene esta costumbre "MyTestProp" y me dio ese mensaje:

  

Referencia a objeto no establecida como una   instancia de un objeto.

     

Descripción: Se produjo una excepción   producido durante la ejecución de la   solicitud Web actual. Por favor revise la   Seguimiento de la pila para obtener más información acerca de   el error y dónde se originó en   el código.

     

Detalles de la excepción:   System.NullReferenceException: Objeto   Referencia no establecida como una instancia de un   objeto.

¿Estoy equivocado en la definición de las propiedades o hay una manera especial para definir matriz a clase personalizada? Tenga en cuenta que la serialización arreglo a cadena, por ejemplo, no me está fallando de esa manera, pero se está trabajando.

Whole fuente:

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());
      }
   }
}

La excepción es:

  

System.NullReferenceException era   Mensaje no controlada = "Referencia a objeto   no establecida en una instancia de un objeto ".   Fuente = "NC3A.SI.Rowlex" StackTrace:          en NC3A.SI.Rowlex.RdfPropertyAttribute.ExtractRange (MemberInfo   MemberInfo, Int32 y minCardinality,   Int32 y maxCardinality)          en NC3A.SI.Rowlex.RdfPropertyAttribute.ExtractRange (MemberInfo   MemberInfo)          en NC3A.SI.Rowlex.Rdfizer.AppendProperty (RdfDocument   doc, MemberInfo MemberInfo,   RdfPropertyAttribute atributo, objeto   artículo, Cadena resourceUri)          en NC3A.SI.Rowlex.Rdfizer.AppendSingleRdfSerializableObject (RdfDocument   doc, elemento de objeto)          en NC3A.SI.Rowlex.Rdfizer.ProcessItem (RdfDocument   doc, elemento Object, String []   rangeTypeUris)          en NC3A.SI.Rowlex.Rdfizer.ExecuteSerialization (IEnumerable   objetos)          en NC3A.SI.Rowlex.Rdfizer.Serialize (IEnumerable   objetos, Boolean   tolerateUnserializebleObjects)          en NC3A.SI.Rowlex.Rdfizer.Serialize (Object   articulo)          en ROWLEXtest1.Program.Main (String []   args) en   C: \ ROWLEXtest1 \ ROWLEXtest1 \ Program.cs: Línea   40          en System.AppDomain._nExecuteAssembly (Asamblea   montaje, args String [])          en Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly ()          en System.Threading.ExecutionContext.Run (ExecutionContext   executionContext, ContextCallback   de devolución de llamada, el estado Object)          en System.Threading.ThreadHelper.ThreadStart ()   InnerException:

¿Fue útil?

Solución

Lo que hizo se ve bien, pero no es un error: Declaración RdfProperty debe tomar "falsa" para MyTestProp como MyTestProp no es una propiedad de tipo de datos, pero propiedad de objeto (que devuelve objetos y no literales).

Sin embargo, no estoy seguro de que esta es la raíz de su problema. E incluso si lo es, usted debe obtener un mensaje de error decente con texto significativo en lugar de tonto NullReferenceException . Por lo tanto, me gustaría tratar de reproducir el error y proporcionar una solución si es aplicable. Podría, por favor, especifique

  • la clase y su decoración que aloja el MyTestProp,
  • el código en el que una instancia de esa clase, y
  • el código que se utiliza para para la serialización.
  • Si hubiera aplicar atributos de nivel de ensamblado (por la ontología - asignación de espacio de nombres), indique eso, también.

Tal vez usted podría considerar enviándome su ejemplo de código para [admin en rowlex.net].

EDIT: Podría reproducir la excepción, que es un error en ROWLEX. La versión fija 2.0.1 ahora puede descargar de la ROWLEX sitio.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top