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:

Foi útil?

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 .

scroll top