我有一个带有数组列表的JSON字符串。我想将数组设置为另一个类。
这是我的JSON:
{ "timestamp" : "1390257561" ,
"bids" : [ [ "833.98" , "3.14189766" ] ,
[ "833.73" , "0.08396004" ] ,
[ "833.65" , "9.64222506" ]
] ,
"asks" : [ [ "834.48" , "0.38622500" ] ,
[ "834.60" , "5.47589215" ] ,
[ "834.61" , "1.36021122" ]
]
}
这是我的班级:
public class OrderBook
{
public double TimeStamp { get; set; }
public List<PriceAmount> Bids { get; set; }
public List<PriceAmount> Asks { get; set; }
}
public class PriceAmount
{
public decimal Usd { get; set; }
public decimal Amount { get; set; }
}
无法填充列表中的对象,因为对象PriceAmount是一个数组。要让此代码工作,对象(Array)应该在它们前面有一个名称。例如:
{ "bids" : [ [ "Usd":"833.98" , "Amount":"3.14189766" ] ,
[ "Usd":"833.73" , "Amount":"0.08396004" ]
]
}
如何将列表数组读入子类?
答案 0 :(得分:2)
我可能会做这样的事情。首先,一个简单的数据结构来保存解析的数据,用一个简单的工厂方法来实例化它:
internal class ParsedJson
{
public uint Timestamp { get; set; }
public List<List<decimal>> Bids { get; set; }
public List<List<decimal>> Asks { get; set; }
public static ParsedJson CreateInstance( string json )
{
ParsedJson instance = Newtonsoft.Json.JsonConvert.DeserializeObject<ParsedJson>( json );
return instance;
}
}
然后使用它来引导更接近可用业务对象的东西:
internal class MyData
{
public static MyData CreateInstance( string json )
{
DateTime unixEpoch = new DateTime( 1970 , 1 , 1 , 0 , 0 , 0 );
ParsedJson record = ParsedJson.CreateInstance( json );
MyData instance = new MyData
{
TimeStamp = unixEpoch.AddSeconds( (double)record.Timestamp ) ,
Bids = record.Bids.Select( x => new BidAsk( x[0] , x[1] ) ).ToArray() ,
Asks = record.Bids.Select( x => new BidAsk( x[0] , x[1] ) ).ToArray() ,
} ;
return instance;
}
public DateTime TimeStamp { get; private set; }
public BidAsk[] Bids { get; private set; }
public BidAsk[] Asks { get; private set; }
private MyData()
{
return;
}
public class BidAsk
{
public decimal Price { get; private set; }
public decimal Amount { get; private set; }
public BidAsk( decimal price , decimal amount )
{
this.Price = price;
this.Amount = amount;
return;
}
}
}
一旦拥有,使用很简单:
class Program
{
private static void Main( string[] args )
{
string json = @"
{ ""timestamp"" : ""1390257561"" ,
""bids"" : [ [ ""833.98"" , ""3.14189766"" ] ,
[ ""833.73"" , ""0.08396004"" ] ,
[ ""833.65"" , ""9.64222506"" ] ,
] ,
""asks"" : [ [ ""834.48"" , ""0.38622500"" ] ,
[ ""834.60"" , ""5.47589215"" ] ,
[ ""834.61"" , ""1.36021122"" ] ,
] ,
}
";
MyData data = MyData.CreateInstance( json );
return;
}
答案 1 :(得分:1)
您可以将其反序列化为
public class OrderBook
{
public double TimeStamp { get; set; }
public List<List<decimal>> Bids { get; set; }
public List<List<decimal>> Asks { get; set; }
}
然后将List<List<decimal>>
转换为正确的PriceAmount
个对象。