Json.NET: обратные вызовы сериализации в базовом объекте - PullRequest
1 голос
/ 15 июня 2011

При использовании Json.NET поддерживаются ли обратные вызовы сериализации, когда OnDeserializedAttribute размещается в методе базового класса? Например, используя этот граф объектов:

[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 голос
/ 10 мая 2013

Да. OnDeserialized поддерживается. См. документацию

Вот рабочий 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...