使用RdfPropertyの配列をカスタムクラス
質問
私は定義:
[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" } };
}
}
しようserializeのクラスを含むこのカスタム"MyTestProp"くなっていてそのメッセージ:
オブジェクト参照に設定されない、 のインスタンスオブジェクトです。
説明:する独自のレンダリングメカニズムの例外 発生した時の実行 現在のwebます。を確認してください スタックトレース情報 エラーが発 のコードです。
例外の詳細:システム。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());
}
}
}
例外:
システム。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オブジェクト項目では、String[] rangeTypeUris) でNC3A.SIです。Rowlex.Rdfizer.ExecuteSerialization(IEnumerable オブジェクト) でNC3A.SIです。Rowlex.Rdfizer.Serialize(IEnumerable 物Boolean tolerateUnserializebleObjects) でNC3A.SIです。Rowlex.Rdfizer.Serialize(オブジェクト 項目) でROWLEXtest1.プログラム。Main(String[] (<%=args%>等:args) C: OWLEXtest1 OWLEXtest1\プログラム。cs:線 40 です。AppDomain._nExecuteAssembly(組み立て 組み立て、String[]args) マイクロソフトリサーチ.VisualStudio.HostingProcess.HostProc.RunUsersAssembly() です。Threading.ExecutionContext.Run(ExecutionContext executionContext,ContextCallback コールバック、オブジェクトの状態) です。Threading.ThreadHelper.ThreadStart() InnerException:
解決
何をしたかに見えOKが多いですが、エラー:RdfProperty宣言は"false"をMyTestPropとしてMyTestPropなデータ型物件がオブジェクトの設定で返します物体のないリテラル).
しかし、私にはこのルーツとの問題です。とてもき あのエラーメッセージと意味のあるテキストの代わりに馬鹿げNullReferenceException.そのため、今まで再現し過誤を修正せられる場合があります。きください指定
- のクラスとその装飾るのは、MyTestProp,
- このコードがインスタンスを生成するクラス
- コードの使用を直列化します。
- いただきました応募組み立てレベル属性のためのオントロジー-名前空間マッピング),と分かるように表示してください。
もしかしたらと考えて送信くコードサンプルは"adminでrowlex.net].
編集:私の再現も例外ではバグROWLEX. 固定2.0.1のバージョンを現在からダウンロード ROWLEX サイトです。