我面临的问题是我的服务器端字典对象没有使用来自客户端的数据进行初始化。我的以下代码有什么问题?我是否需要在此提及更多代码,或者有人可以根据客户端和服务器端的UserPermissions类型找出? 客户端的字典声明是否错误?
这是我的客户端代码,它将数组中的字典对象推送到服务器,
$scope.studentDetail.UserPermissions = [];
var DataToBeSentToServer = { Key: Id, Value: [] };
for (var j in selectUsers) {
DataToBeSentToServer.Value.push(selectUsers[j].Id);
}
$scope.studentDetail.UserPermissions.push(DataToBeSentToServer);
服务器代码: 该课程正在
之外进行初始化public class Test{
public Dictionary<Guid, List<Guid>> UserPermissions { get; set; }
}
答案 0 :(得分:0)
您发送到服务器的JSON对象不是字典。它是一个具有两个属性的对象:
public class MyJsonObject
{
public Guid Key {get; set;}
public Guid[] Value {get; set;}
}
答案 1 :(得分:0)
默认情况下,C#字典被序列化为javascript对象,因为它基本上代表了一个hashmap。这意味着示例Dictionary<Guid, List<Guid>>
的json输出将如下所示:
{
"85dad90f-...": [
"413516ea-...",
"a38473df-...",
"bee09890-..."
],
"39454a68-...": [
"f5510938-...",
"57260cb7-...",
"ed201f04-..."
],
"a7bc6a9e-...": [
"77689b7c-...",
"baf3f74b-...",
"735f77eb-..."
]
}
因此,要从js反序列化,您必须创建类似的数据结构。下面的注释代码片段只是为了让您了解实现。
// assuming your data model looks like this:
var users = [{
username : 'John Doe',
userid : 'f5510938-...',
permissions : [
{ permission : 'view-landing-page', permissionid : '57260cb7-...' }, ...
]
}, ...]
// your implementation might look like:
var permissions = {}; // to be sent to server
foreach (var userIndex in users) {
var user = users[userIndex];
var key = user.userid; // Dictionary<Guid, <- dictionary key
if (!permissions[key]) {
permissions[key] = [];
}
foreach(pIndex in user.permissions) {
var permission = user.permissions[pIndex];
permissions[key].push(permission.permissionid);
}
}