【发布时间】:2019-06-08 17:55:47
【问题描述】:
我希望 Json.NET 反序列化器能够直接使用:ArrayWrapper[] Array { get; set; } 属性。
我应该写自定义JsonConverter 还是有更简单的方法?
public class Obj {
//public ArrayWrapper[] Array { get; set; } // I want it to work!!!
[JsonProperty( "array" )]
public int[][] Array_ { get; set; }
[JsonIgnore]
public ArrayWrapper[] Array => Array_.Select( i => new ArrayWrapper( i ) ).ToArray();
}
public struct ArrayWrapper {
private readonly int[] array;
public int Item0 => array[ 0 ];
public int Item1 => array[ 1 ];
public ArrayWrapper(int[] array) {
this.array = array;
}
public static implicit operator ArrayWrapper(int[] array) {
return new ArrayWrapper( array );
}
}
注意:数组数组由此 API 返回:https://github.com/binance-exchange/binance-official-api-docs/blob/master/rest-api.md#klinecandlestick-data。我想将内部数组转换为对象。
【问题讨论】:
-
或者例如我想将根数组包装到具有数组属性的对象中。
-
1) 您要序列化或反序列化什么 JSON?你能请edit你的问题来显示你想要的JSON吗? 2)
ArrayWrapper没有array的公共 getter,只有前两个条目(假定存在)。当数组长度错误时会发生什么? -
好的,仍然不确定我是否理解你的问题,但如果我这样做最简单的方法是 1) 使
ArrayWrapper实现IEnumerable<int>,以及 2) 添加public ArrayWrapper(IEnumerable<int> enumerable)构造函数。完成后,Json.NET 会将ArrayWrapper视为只读集合并(反)将其序列化。演示在这里:dotnetfiddle.net/jHHx86。这就是你想要的吗? -
此 API 返回数组数组:github.com/binance-exchange/binance-official-api-docs/blob/… 我想将内部数组转换为对象。谢谢您的回答。我想我将不得不使用它。但这不是完美的解决方案(:
-
但这不是完美的解决方案(: - 那我应该添加一个答案吗?或者你可以edit你的问题更清楚地解释你的要求吗?已经有关于反序列化 Binance Kline/Candlestick 数据的答案,请参阅C#: Parsing a non-JSON array-only api response to a class object with x properties,