由于我无法控制的原因,我将从外部服务返回的数据格式化为字符串数组数组:[["string_one", "string_two"]]
我试图将其反序列化为具有两个属性的对象:
public class MyObject
{
public string PropertyOne { get; set; }
public string PropertyTwo { get; set; }
}
我正在使用Json.NET进行所有JSON序列化/反序列化。当我尝试转换字符串数组的数组时,我得到一个异常,说JsonArray无法转换为MyObject。实现这个的适当方法是什么?
答案 0 :(得分:2)
目标对象和JSON之间存在很大差异。您可以手动执行映射:
string json = "[[\"string_one\", \"string_two\"]]";
dynamic result = JsonConvert.DeserializeObject(json);
var myObject = new MyObject
{
PropertyOne = result[0][0],
PropertyTwo = result[0][1]
};
答案 1 :(得分:2)
结束使用JsonConverter实现此功能。我将MyObject更改为:
[JsonConverter(typeof(MyObjectConverter))]
public class MyObject
{
public string PropertyOne { get; set; }
public string PropertyTwo { get; set; }
}
然后实现了MyObjectConverter:
public class MyObjectConverter : JsonConverter
{
public override object ReadJson (JsonReader reader, Type objectType, Object existingValue, JsonSerializer serializer)
{
int pos = 0;
string[] objectIdParts = new string[2];
while (reader.Read())
{
if (pos < 1)
{
if (reader.TokenType == JsonToken.String)
{
objectIdParts[pos] = reader.Value.ToString();
pos++;
}
}
// read until the end of the JsonReader
}
return new MyObject(objectIdParts);
}
public override void WriteJson (JsonWriter writer, object value, JsonSerializer serializer)
{
throw new NotImplementedException ();
}
public override bool CanWrite {
get {
return base.CanWrite;
}
}
public override bool CanRead { get { return true; } }
public override bool CanConvert (Type objectType)
{
return true;
}
}
答案 2 :(得分:1)
老实说,我只是将其反序列化为string[][]
并将其映射到您的域图层中。花在自定义序列化上的时间很少值得。