Usando RdfProperty de matriz para classe personalizada
Pergunta
Eu tenho 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" } };
}
}
Quando tento serializar a classe que contém este costume "MyTestProp" e ele me deu essa mensagem:
Referência de objeto não definida para uma instância de um objecto.
Descrição: Uma exceção sem tratamento ocorreu durante a execução do solicitação da web atual. Por favor, revise o Rastreamento de pilha para obter mais informações sobre o erro e onde foi originado no o código.
Detalhes da exceção: System.NullReferenceException: Objeto A referência não definido como um exemplo de um objeto.
Estou errado em definir essas propriedades ou há uma maneira especial para definir matriz para classe personalizada? Note-se que a serialização de matriz para cordas, por exemplo, não está me deixando de funcionar dessa maneira, mas ele está trabalhando.
fonte inteira:
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());
}
}
}
A exceção é:
System.NullReferenceException foi unhandled Message = "Referência de objeto não definida para uma instância de um objeto." Fonte = "NC3A.SI.Rowlex" StackTrace: em NC3A.SI.Rowlex.RdfPropertyAttribute.ExtractRange (MemberInfo MemberInfo, Int32 & minCardinality, Int32 & maxCardinality) em NC3A.SI.Rowlex.RdfPropertyAttribute.ExtractRange (MemberInfo MemberInfo) em NC3A.SI.Rowlex.Rdfizer.AppendProperty (RdfDocument doc, MemberInfo MemberInfo, atributo RdfPropertyAttribute, Object item, Cordas ResourceURI) em NC3A.SI.Rowlex.Rdfizer.AppendSingleRdfSerializableObject (RdfDocument doc, inciso Object) em NC3A.SI.Rowlex.Rdfizer.ProcessItem (RdfDocument doc, inciso Object, String [] rangeTypeUris) em NC3A.SI.Rowlex.Rdfizer.ExecuteSerialization (IEnumerable objetos) em NC3A.SI.Rowlex.Rdfizer.Serialize (IEnumerable objetos, Boolean tolerateUnserializebleObjects) em NC3A.SI.Rowlex.Rdfizer.Serialize (Object item) em ROWLEXtest1.Program.Main (String [] args) em C: \ ROWLEXtest1 \ ROWLEXtest1 \ Program: linha 40 em System.AppDomain._nExecuteAssembly (Assembly montagem, String [] args) em Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly () em System.Threading.ExecutionContext.Run (executionContext executionContext, ContextCallback de chamada de retorno, estado do objeto) em System.Threading.ThreadHelper.ThreadStart () InnerException:
Solução
O que você fez parece ok, mas há um erro: declaração RdfProperty deve tomar "false" para MyTestProp como MyTestProp não é uma propriedade tipo de dados, mas propriedade do objeto (que retorna objetos e não literais).
No entanto, não estou certo de que esta é a raiz de seu problema. E mesmo que seja, você deve obter uma mensagem de erro decente com texto significativo em vez de bobo NullReferenceException . Portanto, eu gostaria de tentar reproduzir o erro e fornecer uma correção, se aplicável. Poderia, por favor, especifique
- a classe e sua decoração que hospeda o MyTestProp,
- o código onde você instancia dessa classe, e
- o código que você usa para para serialização.
- Se você tivesse aplicar atributos montagem de nível (por ontologia - mapeamento de namespace), indique isso também.
Talvez você poderia considerar me enviar o seu exemplo de código para [admin em rowlex.net].
EDIT: Eu poderia reproduzir a exceção, é um bug no ROWLEX. A 2.0.1 versão fixa podem agora baixado da href="http://rowlex.nc3a.nato.int" rel="nofollow noreferrer"> ROWLEX local .