我有一个字典String world = "world";
Preconditions.checkNotNull(string, "Hello %s",world);
的整数和字符串,其中整数是ids,字符串是用户名,当我使用Dictionary<int, string>
将其转换为JSON
时,我得到如下内容:
Json.NET
我将其转换为:
{"3":"jack","2":"john"}
但我希望得到这样的东西:
Dictionary<int, string> dictFriends = new Dictionary<int, string>();
foreach (var id in resultList)
{
var user = db.Users.Find(id);
string friend = user.Username;
dictFriends.Add(id, friend);
}
string json = JsonConvert.SerializeObject(dictFriends);
有可能吗?
答案 0 :(得分:3)
据我所知,您必须将字典转换为JSON.NET认为是IEnumerable的字典:
// YOUR DICTIONARY
var dictFriends = new Dictionary<int, string>() {
{1,"Jack"},
{2,"John"},
{3,"Jeff"}
};
// TRANSFORM INTO IENUMERABLE
var transformed = from key in dictFriends.Keys
select new { id = key, user = dictFriends[key] };
// SERIALIZE
var json = JsonConvert.SerializeObject(transformed);
输出:
[
{&#34; id&#34;:1,&#34;用户&#34;:&#34; Jack&#34;},
{&#34; id&#34;:2,&#34;用户&#34;:&#34; John&#34;},
{&#34; id&#34;:3,&#34;用户&#34;:&#34; Jeff&#34;}
]
答案 1 :(得分:0)
您尝试将字典用作数组/列表,写入现有密钥将覆盖它。此外,您当前的密钥类型为int
,因此您将拥有JSON输出,例如
{1: "jack", 2: "john"}
而是将对象类型设置为List<Dictionary<string, Object>>
List<Dictionary<string, object>> friends = new List<Dictionary<string, Object>>();
foreach (var id in resultList)
{
var user = db.Users.Find(id);
string friend = user.Username;
Dictionary<string, object> dictFriend = new Dictionary<string, Object>();
dictFriend.Add("id", id);
dictFriend.Add("name" , friend);
friends.Add(dictFriend);
}
string json = JsonConvert.SerializeObject(friends);
答案 2 :(得分:0)
以下将以您之后的形式生成输出;只代替if
和DataContractJsonSerializer
,您的字段将被命名为id
和user
。原因是这些是字典上的属性名称。
如果您还需要更改这些名称(即它不仅仅是您感兴趣的结构),您还需要使用自定义类覆盖字典,您可以在其中添加属性key
等属性可更改其解析方式...有关详情,请参阅http://www.newtonsoft.com/json/help/html/SerializationAttributes.htm。
value
示例输出:
[JsonProperty(PropertyName = "User")]