JSON:
[
{
"ProspectNo": "1000000073",
"MakerId": "C136771",
"MkrDate": "2015/11/26",
"TranID": null,
"ScoreData": {
"Client Experience": "1",
"Stability & Ownership": "7",
"Property ownership": "22",
"Co-app/Guarantor": "16",
"proposed cost": "1800000"
}
}
]
这是我尝试过的课程:
[DataContract]
public class Score
{
[DataMember()]
public string ProspectNo;
[DataMember()]
public string MakerId;
[DataMember()]
public string MkrDate;
//[DataMember()]
//public string ScoreData;
[DataMember()]
//public Dictionary<string, string> ScoreData { get; set; }
public List<ScoreDataClass> ScoreData;
[DataMember()]
public string TranID;
}
[DataContract]
public class ScoreDataClass
{
[DataMember()]
public string key { get; set; }
[DataMember()]
public string value { get; set; }
}
问题在于我的方法:
public Main CalculateScore(Score scoreobj)
{
//ScoreData count is always 0.
}
一切都很好,除了我从未在ScoreData中获得值。
我在网上尝试了各种Json到C#类生成器,例如http://jsonutils.com/,但它没有给出预期的结果。
JSON字符串将作为httppost从客户端发送。我无法改变它的发送方式。
注意:
我不能把它硬编码为(Name="Client Experience")
等,因为我不知道它会有多少或者是什么。它始终是客户体验并不是必需的。
答案 0 :(得分:2)
JSON对象可以转换为Dictionary<string, object>
,但不能转换为具有键和值属性的自定义类的列表。
我使用了Dictionary<string, string>
,因为您的对象似乎只有字符串值
您可以使用以下类定义:
public class Score
{
public string ProspectNo { get; set; }
public string MakerId { get; set; }
public string MkrDate { get; set; }
public string TranID { get; set; }
public Dictionary<string, string> ScoreData { get; set; }
}
你应该如何序列化它:
var result = JsonConvert.DeserializeObject<Score[]>(jsonString);
请注意,它是Score[]
,而不是Score
,因为您的JSON代表Score
个对象的数组。
序列化后,您将能够像这样访问此词典:
result[0].ScoreData["Stability & Ownership"] // 7
执行结果:
答案 1 :(得分:1)
鉴于这是一个WCF REST服务,您可以使用[DataMember]
属性重命名生成的类的属性。
public class ScoreData
{
[DataMember(Name="Client Experience")]
public string ClientExperience { get; set; }
[DataMember(Name="Stability & Ownership")]
public string StabilityOwnership { get; set; }
[DataMember(Name="Property ownership")]
public string PropertyOwnership { get; set; }
[DataMember(Name="Co-app/Guarantor")]
public string CoAppGuarantor { get; set; }
[DataMember(Name="proposed cost")]
public string ProposedCost { get; set; }
}
public class Example
{
public string ProspectNo { get; set; }
public string MakerId { get; set; }
public string MkrDate { get; set; }
public object TranID { get; set; }
public ScoreData ScoreData { get; set; }
}