Внедрение зависимостей и JavaScriptConverter.Deserialize - PullRequest
0 голосов
/ 06 мая 2011

Мое приложение должно сочетать широкое использование внедрения зависимостей с использованием JSON в качестве общедоступного API. По-видимому, это приводит к необходимости пользовательского JavaScriptConverter.

Прямо сейчас мой метод десериализации JavaScriptConverter выглядит следующим образом:

public override object Deserialize(IDictionary<string, object> dictionary, Type type, JavaScriptSerializer serializer)
{
    var result = IocHelper.GetForType(type);
    return result;
}

Это возвращает соответствующий класс. К сожалению, он не может заполнить членов класса применимыми значениями. Мне не хватает способа сказать Сериализатору: «Вот тип, который вы просили. Теперь заполните его».

1 Ответ

1 голос
/ 09 мая 2011

Решением, которое я использовал, было переключение с JavaScriptSerializer на Конвертер JSON от Newtonsoft

Мне удалось получить обратную связь, написав один CustomCreationConverter:

public class JsonDomainConverter : CustomCreationConverter<object>
{
    public JsonDomainConverter()
    {
    }

    public override bool CanConvert(Type objectType)
    {
        return objectType.IsInterface;
    }

    public override object Create(Type objectType)
    {
        return IocHelper.GetForType(objectType);
    }
}

Без сомнения, такой же подход возможен с JavaScriptSerializer, я просто не мог понять, как заставить его работать.В случае с Newtonsoft это заняло максимум пару часов и всего пару строк кода.

...