我的样本json看起来像:
{
"isError": false,
"Status": 0,
"Message": "The request processed successfully.",
"Result": [
{
"EmployeeId": {
"DisplayValue": "XX11"
},
"Title": {
"DisplayValue": "M"
},
"FirstName": {
"DisplayValue": "J"
},
"LastName": {
"DisplayValue": "E"
}
}
]
}
我正在寻找一个设置或自定义转换器,将嵌套类折叠到各自的属性中。
即
public string EmployeeId {get; set;}
因此,在上面的例子中,分配的值将是:“XX11”
我已经玩了一会儿,现在我需要一些帮助。
这是开箱即用支持还是你必须为它编写自定义转换器?
答案 0 :(得分:1)
将你的json转换为class我得到了这个结构:
public class EmployeeId
{
public string DisplayValue { get; set; }
}
public class Title
{
public string DisplayValue { get; set; }
}
public class FirstName
{
public string DisplayValue { get; set; }
}
public class LastName
{
public string DisplayValue { get; set; }
}
public class Result
{
public EmployeeId EmployeeId { get; set; }
public Title Title { get; set; }
public FirstName FirstName { get; set; }
public LastName LastName { get; set; }
}
public class RootObject
{
public bool isError { get; set; }
public int Status { get; set; }
public string Message { get; set; }
public List<Result> Result { get; set; }
}
要反序列化,您可以使用
var res1 = JsonConvert.DeserializeObject<RootObject>(json); // Newton.json dll
JavaScriptSerializer js = new JavaScriptSerializer(); // System.Web.Script.Serialization
var res2 = js.Deserialize<RootObject>(json);
答案 1 :(得分:1)
解决此问题的一种可能方法是编写一个JsonConverter
来处理属性级别以展平&#34; DisplayValue&#34;反对它的价值。这实际上非常简单:
public class DisplayValueConverter : JsonConverter
{
public override bool CanConvert(Type objectType)
{
return objectType == typeof(string);
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
JObject obj = JObject.Load(reader);
return (string)obj["DisplayValue"];
}
public override bool CanWrite
{
get { return false; }
}
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
throw new NotImplementedException();
}
}
要使用转换器,您需要为[JsonConverter]
类中的每个需要展平的属性添加Result
属性。
public class RootObject
{
public bool isError { get; set; }
public int Status { get; set; }
public string Message { get; set; }
public List<Result> Result { get; set; }
}
public class Result
{
[JsonConverter(typeof(DisplayValueConverter))]
public string EmployeeId { get; set; }
[JsonConverter(typeof(DisplayValueConverter))]
public string Title { get; set; }
[JsonConverter(typeof(DisplayValueConverter))]
public string FirstName { get; set; }
[JsonConverter(typeof(DisplayValueConverter))]
public string LastName { get; set; }
}
然后,将JSON反序列化为RootObject
类,它应该&#34;只是工作&#34;:
RootObject root = JsonConvert.DeserializeObject<RootObject>(json);