【发布时间】:2016-02-03 11:01:08
【问题描述】:
我有以下 C# 代码,使用 Newtonsoft.Json v6.0.6:
void Main() {
var data=new AllData();
var cst=new CustomerData();
cst.CustomerName="Customer1";
cst.Add(1, new UserData() {UserName="User1", UserPhone="123456789"});
cst.Add(2, new UserData() {UserName="User2", UserPhone="987654321"});
data.Add(1, cst);
string json = Newtonsoft.Json.JsonConvert.SerializeObject(data, Newtonsoft.Json.Formatting.Indented);
Console.WriteLine(json);
}
public class UserData {
public string UserName;
public string UserPhone;
}
public class CustomerData:Dictionary<int,UserData> {
public string CustomerName;
}
public class AllData:Dictionary<int,CustomerData> {}
所以我希望从这段代码中看到这个输出:
{
"1": {
"CustomerName": "Customer1",
"1": {
"UserName": "User1",
"UserPhone": "123456789"
},
"2": {
"UserName": "User2",
"UserPhone": "987654321"
}
}
}
但我看到的是:
{
"1": {
"1": {
"UserName": "User1",
"UserPhone": "123456789"
},
"2": {
"UserName": "User2",
"UserPhone": "987654321"
}
}
}
即我的 CustomerName 属性被忽略。
我玩过 Newtonsoft.Json.MemberSerialization 和 Newtonsoft.Json.JsonProperty 属性但没有成功,所以想知道现在去哪里看。一个完整的自定义序列化实现似乎有点过头了,有没有简单的方法来解决这个问题?
【问题讨论】:
-
从
List<T>或Dictionary<T>继承被认为是代码异味。你有什么理由不继承Dictionary<T>就无法逃脱? -
@AndyJ - 我知道自定义序列化,但似乎应该有一个更简单的方法,因此我的问题
-
@GediminasMasaitis 我可以拥有字典的属性,但这会使 Json 序列化更加复杂,因为我想省略属性名称。我可以有一个私有字典和我自己的访问器方法,但这会使我的示例复杂化,所以我选择继承来演示这个问题
-
JsonExtensionDataAttribute 合适吗? newtonsoft.com/json/help/html/…stackoverflow.com/questions/14893614/…
标签: c# serialization json.net