这个JSON的C#类是什么?

时间:2015-12-15 11:19:31

标签: c# .net json wcf

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")等,因为我不知道它会有多少或者是什么。它始终是客户体验并不是必需的。

2 个答案:

答案 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

执行结果:

My example

答案 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; }
}