Usando RdfProperty de matriz a clase personalizada
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:
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.