Здравствуйте @Diana M00nshine,
Из того, что я понял, вы хотите принимать только те транзакции, для которых установлено поле accountBalance.
Сначала я бы предложил вам создать этот класс для отражать схему вашего поля json массива, называемого «транзакции».
class Transaction
{
public string accountBalance { get; set; }
public string type { get; set; }
public string marginRate { get; set; }
public string alias { get; set; }
public string id { get; set; }
public int userID { get; set; }
public string accountID { get; set; }
public string batchID { get; set; }
public string requestID { get; set; }
public string time { get; set; }
}
Чтобы получить все транзакции, для которых свойство accountBalance определено в строке JSON, вы можете сделать это, как показано ниже:
- Анализ строки json
- Возьмите токен транзакции и приведите его к IEnumerable
- Затем для каждого элемента внутри токена транзакции вы преобразуете их в объект класса Transaction, который я включил в исходный код выше.
- Приведение к списку объектов транзакций
var json = JObject.Parse(jsonString);
List<Transaction> transactionsWithAccountBalance = json["transactions"].AsJEnumerable()
.Where(t => t["accountBalance"] != null)
.Select(t => t.ToObject<Transaction>())
.ToList();
Если вам нужны только транзакции, для которых не только ключевой accountBalance установлен в json, но также отличается от нулевого или пустого , вы можете обновить условие where следующим образом:
.Where(t => t["accountBalance"] != null && string.IsNullOrEmpty(t["accountBalance"].Value<string>()))
Затем, если вам нужен список со всеми остатками на счетах ваших транзакций, вы можете сделать:
var priceList = transactionsWithAccountBalance.Select(t => t.accountBalance).ToList();
У меня есть включил этот небольшой тестовый класс, чтобы вы могли легко попробовать мое решение. Вы можете видеть, что в списке будут присутствовать только транзакции, которые имеют интересующий ключ в наборе файлов json.
class Program
{
static void Main(string[] args)
{
string jsonString = @"{
""transactions"": [
{
""type"": ""CLIENT_CONFIGURE"",
""marginRate"": ""0.02"",
""alias"": ""Test USD"",
""id"": ""2"",
""userID"": 4455670,
""accountID"": ""101-004-4455670-004"",
""batchID"": ""1"",
""requestID"": ""1789786643428780285"",
""time"": ""2018-01-22T13:01:57.930423995Z""
},
{
""accountBalance"": ""2000.0000"",
""type"": ""TRANSFER_FUNDS"",
""amount"": ""2000.0000000000"",
""fundingReason"": ""ADJUSTMENT"",
""id"": ""3"",
""userID"": 4455670,
""accountID"": ""101-004-4455670-004"",
""batchID"": ""3"",
""requestID"": ""1735743448013647784"",
""time"": ""2018-01-22T13:02:24.580177329Z""
},
{
""type"": ""MARKET_ORDER"",
""instrument"": ""EUR_JPY"",
""units"": ""-2000"",
""timeInForce"": ""FOK"",
""positionFill"": ""DEFAULT"",
""reason"": ""CLIENT_ORDER"",
""id"": ""4"",
""userID"": 4455670,
""accountID"": ""101-004-4455670-004"",
""batchID"": ""4"",
""requestID"": ""60404387589188847"",
""time"": ""2018-01-22T13:06:12.138121604Z""
},
{
""type"": ""ORDER_FILL"",
""orderID"": ""4"",
""instrument"": ""EUR_JPY"",
""units"": ""-2000"",
""price"": ""135.627"",
""pl"": ""0.0000"",
""financing"": ""0.0000"",
""commission"": ""0.0000"",
""accountBalance"": ""2000.0000"",
""gainQuoteHomeConversionFactor"": ""0.009022013713"",
""lossQuoteHomeConversionFactor"": ""0.009023071995"",
""guaranteedExecutionFee"": ""0.0000"",
""halfSpreadCost"": ""0.1353"",
""fullVWAP"": ""135.627"",
""reason"": ""MARKET_ORDER"",
""tradeOpened"": {
""price"": ""135.627"",
""tradeID"": ""5"",
""units"": ""-2000"",
""guaranteedExecutionFee"": ""0.0000"",
""halfSpreadCost"": ""0.1353""
},
""fullPrice"": {
""closeoutBid"": ""135.627"",
""closeoutAsk"": ""135.642"",
""timestamp"": ""2018-01-22T13:05:56.780436649Z"",
""bids"": [
{
""price"": ""135.627"",
""liquidity"": ""10000000""
}
],
""asks"": [
{
""price"": ""135.642"",
""liquidity"": ""10000000""
}
]
},
""id"": ""5"",
""userID"": 4455670,
""accountID"": ""101-004-4455670-004"",
""batchID"": ""4"",
""requestID"": ""60404387589188847"",
""time"": ""2018-01-22T13:06:12.138121604Z""
},
{
""type"": ""MARKET_ORDER"",
""instrument"": ""EUR_JPY"",
""units"": ""2000"",
""timeInForce"": ""FOK"",
""positionFill"": ""REDUCE_ONLY"",
""reason"": ""TRADE_CLOSE"",
""tradeClose"": {
""units"": ""ALL"",
""tradeID"": ""5""
},
""id"": ""6"",
""userID"": 4455670,
""accountID"": ""101-004-4455670-004"",
""batchID"": ""6"",
""requestID"": ""60404387832520278"",
""time"": ""2018-01-22T13:07:10.544407912Z""
}
],
""lastTransactionID"": ""22083""
}";
var json = JObject.Parse(jsonString);
List<Transaction> transactionsWithAccountBalance = json["transactions"].AsJEnumerable()
.Where(t => t["accountBalance"] != null)
.Select(t => t.ToObject<Transaction>())
.ToList();
var priceList = transactionsWithAccountBalance.Select(t => t.accountBalance).ToList();
Console.ReadKey();
}
}
Не забудьте добавить эти пространства имен для того, чтобы скомпилировать программный класс:
using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;
using System.Linq;