c# - serialize - ASP.NET WebAPI 2 deserializando JSON establece algunos objetos anidados en nulo
remove xml formatter web api (0)
Me encuentro con un problema al enviar algunos JSON desde una aplicación AngularJS a un back-end ASP.Net WebAPI 2. Lo que ocurre es que algunas propiedades de la solicitud entrante se configuran como nulas durante la deserialización.
Parte de la solicitud donde ocurre la falla de deserialización:
12: {row: 9, column: 1, order: 13,…}
column: 1
domainEntityProperty: {$id: "157", id: 2616,…}
order: 13
renderType: {$id: "39", id: 1, class: "input"}
row: 9
El fragmento anterior es parte de la solicitud que se envía. Es una llamada screen property
se guarda. La solicitud tiene una matriz de estos objetos. Lo extraño es que todo se deserializa perfectamente cuando se agrega un máximo de una nueva propiedad de pantalla por solicitud. Cuando se agrega más de uno, las propiedades domainEntityProperty
y renderType
se establecen en nulo en la deserialización.
Este es el modelo al que se convierte el JSON en el controlador:
public class ScreenPropertyModel
{
public int Id { get; set; }
public RenderTypeModel RenderType { get; set; }
public int Order { get; set; }
public int Row { get; set; }
public int Column { get; set; }
public DomainPropertyModel DomainEntityProperty { get; set; }
}
Un ejemplo del objeto después de deserializar:
ScreenPropertyModel
-------------------
- Column = 1,
- Row = 9,
- Order = 13,
- DomainEntityProperty = null,
- RenderType = null
¿Alguien sabe por qué las propiedades DomainEntityProperty
y RenderType
son null
? Y más específicamente: ¿por qué esto solo ocurre cuando se guardan múltiples objetos nuevos?
Estaría agradecido si alguien pudiera señalarme en la dirección correcta aquí.
Actualizar ## - DomainProperty
y definiciones RenderType
Propiedad de dominio:
public class DomainPropertyModel
{
public int Id { get; set; }
// some more simple properties
public IList<DefaultValueModel> DefaultValues { get; set; }
public IList<ScreenPropertyModel> ScreenProperties { get; set; }
public ICollection<BusinessRuleProperty> BusinessRuleProperties { get; set; }
}
RenderType:
public class RenderTypeModel
{
public int Id { get; set; }
public string Class { get; set; }
}
Por lo que puedo ver en las herramientas de desarrollo de Chrome, todas estas propiedades están presentes en el objeto que se envía al servidor.