2011-06-14 8 views
1

Json.NETの使用は、OnDeserializedAttributeが基本クラスメソッドに配置されている場合にサポートされるシリアル化コールバックですか?たとえば、このオブジェクトグラフを使用します。Json.NET:ベースオブジェクトのシリアル化コールバック

[DataContract] 
public class StubData:StubBase {} 

[DataContract] 
public class StubBase { 
    public string Id { get; set; } 

    [OnDeserialized] 
    public void OnDeserialized(StreamingContext context) { 
     Id = "1"; 
    } 
} 

var stubData = JsonConvert.DeserializeObject<StubData>(@"{""anyData"":""Foo""}"); 

stubData.Id //returns 1 
+1

印刷しますが、それはちょうどそれを実行することにより、自己の答えを簡単にする必要があり、ありませんか? –

答えて

1

はい。 OnDeserializedがサポートされています。 the documentation

ここには、作業中のcs-scriptの例があります。 Newtonsoft.Json.dllが同じディレクトリにある必要があります

//css_ref Newtonsoft.Json.dll 

using System; 
using System.Windows.Forms; 
using Newtonsoft.Json; 
using System.Runtime.Serialization; 

public class StubData:StubBase {} 

public class StubBase { 
    public string Id { get; set; } 

    [OnDeserialized] 
    public void OnDeserialized(StreamingContext context) { 
     Id = "1"; 
    } 
} 

class Script 
{ 
    [STAThread] 
    static public void Main(string[] args) 
    { 
     var stubData = JsonConvert.DeserializeObject<StubData>(@"{""anyData"":""Foo""}"); 
     Console.WriteLine(stubData.Id); //returns 1 
    } 
} 

これは、私はこれをテストしていません

1 
+0

ただし、属性はInherited = falseと指定されています。属性が派生オブジェクトに適用されないことを意味しませんか? – BlackjacketMack

関連する問題