使用C#中的数字键返回列表

时间:2014-01-27 21:10:43

标签: c# json entity-framework

我的代码如下:

var aaData = 
    ctx.PaymentRates
        .Where(x => x.ServiceRateCodeId == new Guid("BBCE42CB-56E3-4848-B396-4656CCE3CE96"))
        .Select(x => new 
        {
            Id = x.Id
        }).ToList();

使用Json(aaData);转换时生成以下JSON:

"aaData":[
    {"Id":"ab57fc9d-ffb7-4a12-8c5c-03f36b4ef1fe"},
    {"Id":"4c1e9776-5d64-4054-a9c9-0fc8b8b8e8a1"}
    etc.
]

但是,我想在值之前返回键,如下所示:

"aaData":[
    [0] => {"Id":"ab57fc9d-ffb7-4a12-8c5c-03f36b4ef1fe"},
    [1] => {"Id":"4c1e9776-5d64-4054-a9c9-0fc8b8b8e8a1"}
    etc.
]

编辑:我不确定正确的语法 - 重点是,我只想要数字键。

我怎样才能在C#中做到这一点?

4 个答案:

答案 0 :(得分:3)

JSON使用隐式索引 - 意味着保留了数组中元素的顺序,因此当您检索元素时,可以从元素的顺序推断“索引”

如果需要包含“index”元素,则必须使其成为数组元素的属性:

var aaData = 
    ctx.PaymentRates
        .Where(x => x.ServiceRateCodeId == new Guid("BBCE42CB-56E3-4848-B396-4656CCE3CE96"))
        .Select((x, i) => new 
        {
            Index = i,
            Id = x.Id
        }).ToList();

您的JSON应该类似于:

"aaData":[
    {"Index":"0", "Id":"ab57fc9d-ffb7-4a12-8c5c-03f36b4ef1fe"},
    {"Index":"1", "Id":"4c1e9776-5d64-4054-a9c9-0fc8b8b8e8a1"}
    etc.
]

答案 1 :(得分:2)

这不是C#中是否可能的问题,更重要的是JSON具有某种格式并且您希望实现的格式不符合JSON。

因此,如果您希望以这种格式获得结果,您必须构建自己的格式(但是您还必须创建自己的序列化程序,反序列化程序等 - 通常会有很多麻烦)

答案 2 :(得分:2)

你的意思是索引吗?这是你可以获得它的一种方式

var counter = 0;
var aaData = 
    ctx.PaymentRates
        .Where(x => x.ServiceRateCodeId == new Guid("BBCE42CB-56E3-4848-B396-4656CCE3CE96"))
        .Select(x => new 
        {
            Index = counter++,
            Id = x.Id
        }).ToList();

答案 3 :(得分:0)

为了做你想做的事,你必须使用Dictionary而不是List。这样做的:

int idx = 0;
var dict = aaData.ToDictionary(k => "" + idx++);

将返回为您提供以下有效的JSON

"aaData":{
    "0" : {"Id":"ab57fc9d-ffb7-4a12-8c5c-03f36b4ef1fe"},
    "1" : {"Id":"4c1e9776-5d64-4054-a9c9-0fc8b8b8e8a1"}
    etc.
}

请注意,键是包含数值的字符串。 不支持数字值作为键