MVC 4 Beta - Вы должны написать атрибут 'type' = 'object' после записи атрибута с локальным именем '__type' - PullRequest
6 голосов
/ 13 марта 2012

Я работаю с WebAPI в новой бета-версии MVC 4. Я столкнулся с этой ошибкой, когда пытался получить сущность, у которой есть свойство virtual ICollection<> для заполнения. Есть ли способ обойти это прямо сейчас? Я понимаю, что это на стадии бета-тестирования, так что это может быть исправлено в будущем. Это было просто любопытство, если есть решение для этого.

Ответы [ 4 ]

2 голосов
/ 13 марта 2012

Я получил это для работы, удалив виртуальное ключевое слово и убедившись, что объекты и коллекции, у которых было виртуальное ключевое слово, были представлены в операторе включения в моем репозитории.

public class Order
{
    public int ID { get; set; }
    public DateTime OrderDate { get; set; }
    public ICollection<Product> Products { get; set; }
}

public interface IOrderRepository
{
    IQueryable<Order> Orders { get; }
    void SaveOrder(Order order);
    void DeleteOrder(Order order);
}

public class OrderRepository
{
    StoreDbContext db = new StoreDbContext();

    public IQueryable<Order> Orders
    {
        get { return db.Orders.Include("Products"); }
    }

    public void SaveOrder(Order order)
    {
        db.Entry(order).State = order.ID == 0 ? 
                EntityState.Added : 
                EntityState.Modified;

        db.SaveChanges();
    }

    public void DeleteOrder(Order order)
    {
        db.Orders.Remove(order);

        db.SaveChanges();
    }
}
1 голос
/ 15 июня 2012

У меня была такая же проблема, похоже, проблема со стандартным сериализатором WebApi.Я добавил Json.Net в качестве средства форматирования в мой Global.asax.cs, и он работал нормально для меня.Я просто следовал этому примеру: http://blogs.msdn.com/b/henrikn/archive/2012/02/18/using-json-net-with-asp-net-web-api.aspx

Это то, что я получил в своем Global.asax.cs

JsonSerializerSettings serializerSettings = new JsonSerializerSettings();
serializerSettings.Converters.Add(new IsoDateTimeConverter());
GlobalConfiguration.Configuration.Formatters[0] = new JsonNetFormatter(serializerSettings);

Я только что добавил пакет Json.Net с помощью NuGet и создалкласс JsonNetFormatter, как описано в посте выше.

0 голосов
/ 06 июля 2012

столкнулся с этой проблемой также.Моя ситуация была немного другой.

У меня была эта структура, и она не будет работать для меня.

[DataContract]
public class MJPEGCamera : Camera
{
}
[DataContract]
public class H264Camera : Camera
{     
}
[DataContract]
public class Camera
{
    [DataMember]
    public string cameraName { get; set; }
    [DataMember]
    public string address { get; set; }
    [DataMember]
    public string format { get; set; }
    [DataMember]
    public string archiveDaysUrl { get; private set; }
    [DataMember]
    public string archiveHoursUrl { get; private set; }
}

Так что я просто создал фабрику в камере, чтобы выполнить то, что мне нужно.Надеюсь, что это поможет кому-то, кто найдет этот ответ.

0 голосов
/ 11 мая 2012

У меня была похожая проблема. Я исправил это с помощью своего рода класса ViewModel, который имел только простые типы. Я перевел объект, возвращенный DbContext, в свой класс ViewModel и передал его обратно клиенту.

Это не сработало бы во всех ситуациях, но сработало в моей.

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