MVC4 De / Сериализация с JSON / JSON.NET - список <BaseClass>и производные типы внутри - PullRequest
1 голос
/ 28 февраля 2012

Я пытаюсь установить базовую связь с контроллерами MVC4 через JSON. Мне нужно отправлять и получать данные в обеих точках. Для клиента я использую RestSharp.

Моя проблема в том, что список TheObjectIWantToTransfer не имеет значений, когда он передается на сервер. Вот почему я начал играть с Json.NET и на стороне контроллера.

Это пример класса, как выглядит материал, который я хочу передать.

public class TheObjectIWantToTransfer
{
    public int JustAGeneralNumber { get; set; }

    [JsonProperty(TypeNameHandling = TypeNameHandling.All)]
    public List<MyBaseType> Data { get; set; }

    public TheObjectIWantToTransfer()
    {
        Data = new List<MyBaseType>();
    }
}

// class of the list

[KnownType(typeof(MyDerivedTypeA))]
[KnownType(typeof(MyDerivedTypeB))]
public abstract class MyBaseType
{
    public string SomeGeneralStuff { get; set; }
}

public class MyDerivedTypeA : MyBaseType
{
    public int Foo { get; set; }
}

public class MyDerivedTypeB : MyBaseType
{
    public int Bar { get; set; }
    public string IamYourFather { get; set; }
}

Я также пытался использовать

var settings = new JsonSerializerSettings()
        {TypeNameHandling = TypeNameHandling.All};

с JsonConvert Сериализация / десериализация. Выход изменился, но у меня все еще не получилось. Он не смог найти ссылочные типы, и я понятия не имею, как получить TypeNameHandling.All Json.NET Object в контроллере. Я создал JsonNetResult, который дает мне возможность сериализовать с TypeNameHandling.All и отправлять данные клиенту. Но я не могу получить / десериализовать с Json.NET?

 public JsonNetResult MyAction(MyClassType blub)
 {
     // blub ?? is beeing deserialized by the default JSON deserializer of MVC.
 }

Мне просто нужно решение. Я был бы рад сохранить нормальный метод Json () в MVC, если это возможно.

Не могу поверить, что он не работает с производными типами в массиве. Должен быть какой-то атрибут или хак, чтобы активировать это.

Или я делаю что-то сумасшедшее на самом деле неправильно ..

Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...