Asp.net mvc 4 嵌套json反序列化不完全

Asp.net mvc 4 嵌套json反序列化不完全,asp.net-mvc-4,json.net,Asp.net Mvc 4,Json.net,我在标题中提到,json未完全反序列化,因为一些对象在控制器中具有正确的值(我将json发送到asp.net mvc 4控制器),但问题发生在存储在数组中的对象的属性上(确切地说,问题出现在数据上) 我有以下课程: public class Node { [JsonProperty("id")] public int? Id { get; set; } [JsonProperty("name")] public string Name { get; set; }

我在标题中提到,json未完全反序列化,因为一些对象在控制器中具有正确的值(我将json发送到asp.net mvc 4控制器),但问题发生在存储在数组中的对象的属性上(确切地说,问题出现在数据上)

我有以下课程:

public class Node
{
    [JsonProperty("id")]
    public int? Id { get; set; }
    [JsonProperty("name")]
    public string Name { get; set; }
    [JsonProperty("type")]
    public string Type { get; set; }


    private Data _data = new Data();

    [JsonProperty("data")]
    public Data Data { get; set; }

    private List<Adjacency> _adjacencies = new List<Adjacency>();
    [JsonProperty("adjacencies")]
    public List<Adjacency> Adjacencies
    {
        get { return _adjacencies; }
        set { _adjacencies = value; }
    }


    private List<Instance> _dependendStates = new List<Instance>();

    public List<Instance> DependentStates
    {

        get { return _dependendStates; }
        set { _dependendStates = value; }
    }
}

public class Data
{
    [JsonProperty("$posX")]
    public decimal PosX { get; set; }
    [JsonProperty("$posY")]
    public decimal PosY { get; set; }
}

public class Adjacency
{
    [JsonProperty(PropertyName = "nodeTo")]
    public string NodeTo { get; set; }
    [JsonProperty(PropertyName = "data")]
    public AdjData Data { get; set; }
    //doesn't contain definition for automated transitions
}

public class AdjData
{
    [JsonProperty(PropertyName = "$labelid")]
    public string LabelId { get; set; }
    [JsonProperty(PropertyName = "$labeltext")]
    public string Label { get; set; }
    [JsonProperty(PropertyName = "$type")]
    public string Type { get; set; }    
}

我在整理这件事时遇到了一个问题,因为我不明白或者不知道问题在哪里

免责声明:我无法准确地复制此内容,就像我的案例中的
Label
LabelId
反序列化很好一样,尽管
Type
没有,因此我的anwser可能无法解决您遇到的问题

在我的例子中,我只能反序列化
“$type”:“labeled_arrow”
属性,如果它不是第一个属性-如果它出现在
“$labelid”之后:“Label Name”
“$labeltext”:“Label Name”
它工作得很好

奇怪的是,如果
$type
属性在Json中被调用为
type
,并在C#中被称为
[JsonProperty(PropertyName=“type”)]
,那么无论顺序如何,它都可以很好地反序列化


在您的情况下,您也不能反序列化
Label
LabelId
,因此您的问题可能是由其他原因引起的。为了排除我的建议,可能需要尝试修改一些属性名称(可能只是去掉$)以查看它们是否导致属性反序列化错误。

我遇到了相同的问题,但在我的情况下,这与数据如何从客户端传输有关。确保AJAX请求使用了正确的标题和格式。例如:

        dataType: 'json',
        contentType: 'application/json; charset=UTF-8',
        data: JSON.stringify({
            MemberId : '123',
            UserName: '456',
            Parameters: [
                { Value : 'testing' },
                { Value : 'test2' }
            ]
        }),

我曾考虑删除$1,看看它是否会引起任何问题,但没有任何改变(我很高兴它没有改变,因为我真的需要它)。我要调查一下。谢谢。好的,我重新检查了那件事,美元才是问题所在。谢谢
        dataType: 'json',
        contentType: 'application/json; charset=UTF-8',
        data: JSON.stringify({
            MemberId : '123',
            UserName: '456',
            Parameters: [
                { Value : 'testing' },
                { Value : 'test2' }
            ]
        }),