root / trunk / Pithos.Interfaces / PermissionConverter.cs @ 9aa8abad
History | View | Annotate | Download (1.6 kB)
1 |
using System; |
---|---|
2 |
using System.Collections.Generic; |
3 |
using System.Linq; |
4 |
using System.Text; |
5 |
using Newtonsoft.Json; |
6 |
|
7 |
namespace Pithos.Interfaces |
8 |
{ |
9 |
public class PermissionConverter:JsonConverter |
10 |
{ |
11 |
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) |
12 |
{ |
13 |
var dict = (Dictionary<string, string>) value; |
14 |
var pairs = from pair in dict |
15 |
group pair by pair.Value into g |
16 |
select new {Permission=g.Key,Names=String.Join(",", g.SelectMany(p=>p.Key))}; |
17 |
|
18 |
var result=pairs.Aggregate(new StringBuilder(), |
19 |
(builder, perm) => |
20 |
builder.AppendFormat("{0}={1};", perm.Permission, perm.Names)); |
21 |
|
22 |
var finalValue = result.ToString(); |
23 |
writer.WriteValue(finalValue); |
24 |
} |
25 |
|
26 |
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) |
27 |
{ |
28 |
|
29 |
var permissionString= (string) reader.Value; |
30 |
|
31 |
var permissions = (from permisson in permissionString.Split(';') |
32 |
let parsed = permisson.Split('=') |
33 |
from account in parsed[1].Split(',') |
34 |
select new { account, Permission = parsed[0] }) |
35 |
.ToDictionary(perm=>perm.account,perm=>perm.Permission); |
36 |
|
37 |
return permissions; |
38 |
} |
39 |
|
40 |
public override bool CanConvert(Type objectType) |
41 |
{ |
42 |
return (objectType==typeof(Dictionary<string,string>)); |
43 |
} |
44 |
} |
45 |
} |