我有如下JSON数据
{
"data" : [{
"FirstName": "John",
"MiddleName": "F",
"LastName": "Anderson"
}]
}
并且当我反序列化时,它应该merge \ concat合并为单个属性,这是一个复杂的类型(类名)。如何在ReadJson方法中获取所有3个字符串json属性。
class Data {
public Name empName;
};
class Name{
public string FName;
public string MName;
public string LName;
};
我尝试使用牛顿JSON和JSONConverter使用以下代码
class Data {
[JsonProperty("LastName")]
[JsonConverter(typeof(StringToName))]
public Name empName;
};
public class StringToName: JsonConverter
{
public override bool CanConvert(Type objectType)
{
throw new NotImplementedException();
}
public override bool CanWrite
{
get
{
return false; // we'll stick to read-only. If you want to be able
// to write it isn't that much harder to do.
}
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
// Note: I've skipped over a lot of error checking and trapping here
// but you might want to add some
Name objInst = new Name
{
**//Problem: how do i get all the 3 properties so that it can be
// merged together **
=====================
};
return objInst;
}
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
throw new NotImplementedException();
}
}
您可以在没有JsonConverter
的情况下执行此操作,例如以下代码:1-创建与Json匹配的类,并添加MergedName
属性,该属性采用串联的FirstName
,MiddleName
和LastName
:
public class Data
{
[JsonProperty("data")]
public DataChild[] Names { get; set; }
};
public class DataChild
{
[JsonProperty("FirstName")]
public string FirstName { get; set; }
[JsonProperty("MiddleName")]
public string MiddleName { get; set; }
[JsonProperty("LastName")]
public string LastName { get; set; }
public string MergedName => $"{FirstName} {MiddleName} {LastName}";
};
2-反序列化Json并显示并置名称:
Data data = JsonConvert.DeserializeObject<Data>(json);
foreach(DataChild name in data.Names)
{
Console.WriteLine($"FirstName : {name.FirstName}, MiddleName : {name.MiddleName}, LastName : {name.LastName}, " +
$"ConcatenatedName : {name.MergedName}");
}
结果
FirstName : John, MiddleName : F, LastName : Anderson, ConcatenatedName : John F
Anderson
希望您能找到帮助。