Я передаю документ BSON для вставки в коллекцию MongoDB. Ниже приведен мой код:
public void operationMongodb(UInt64 seq, UInt32 blocknumber, DateTime datetime, String action, String Receiver, String Trxid,BsonDocument data)
{
try
{
MongoClient client = new MongoClient(connectionString);
IMongoDatabase db = client.GetDatabase("dqzmember");
var collection = db.GetCollection<BsonDocument>("memberdata");
var document = new BsonDocument {
{ "Sequence", BsonInt64.Create(seq) },
{"Block Number", BsonInt32.Create(blocknumber) },
{"Datetime", BsonDateTime.Create(datetime) },
{"Action", BsonString.Create(action) },
{"Receiver", BsonString.Create(Receiver) },
{"TransactionID", BsonString.Create(Trxid) },
{"Data", BsonDocument.Create(data) }
};
collection.InsertOneAsync(document);
}
catch (Exception ex)
{
Console.WriteLine("Error" + ex);
}
}
public async void getinfo()
{
try
{
UInt64 sequence; UInt32 blocknumber; DateTime datetime; string actionaname; String Receiver; String Trxid;
var r = eos;
var resultaction = await eos.GetActions("jeffaccount", 0, 100);
string globalActionJson = JsonConvert.SerializeObject(resultaction);
foreach (GlobalAction action in resultaction.actions)
{
var test = action.action_trace.act;
sequence = Convert.ToUInt64(action.account_action_seq);
blocknumber = Convert.ToUInt32(action.block_num);
datetime = Convert.ToDateTime(action.block_time);
actionaname = test.name.Trim();
Receiver = action.action_trace.receipt.receiver.Trim();
Trxid = action.action_trace.trx_id.Trim();
var dataarguments = JsonConvert.SerializeObject(test.data);
BsonDocument datadocument = new BsonDocument();
datadocument = BsonDocument.Parse(dataarguments);
operationMongodb(sequence, blocknumber, datetime, actionaname, Receiver, Trxid, datadocument);
}
}
catch (Exception ex)
{
Console.WriteLine(ex);
}
}
Моя проблема в переменной dataarguments иногда JSON, а иногда просто небольшая строка (нет JSON). Если это JSON, то этот код работает нормально, но для строки, я не понимаю, как проверить это условие при вставке данных в качестве документа. Я пытаюсь сделать это в operationMongodb :
object insertData;
if (IsJson(data))
{
insertData = BsonDocument.Parse(data);
}
else
{
insertData = BsonString.Create(data);
}
, тогда как Is Json - это функция для проверки, являются ли данные JSON или нет. Мне просто нужно проверить тип данных и вставить соответственно в том же столбце. Так что я могу проверить условие при предоставлении аргумента для вставки, то есть здесь:
{"Данные", BsonDocument.Create (data)}
Или какое-либо другое решение? Пожалуйста, помогите.