有人可以爲Delphi提供一個完整的Bson庫嗎? 我試圖從http://bsonspec.org使用http://code.google.com/p/pebongo/source/browse/trunk/_bson.pas,但有一些結構不受支持。Delphi的Bson庫?
或者我沒有正確使用它,就像這個類沒有文檔我找不到正確的用法。
我想創建一個項目列表,這個項目是我的可序列化的對象。
但如何創建一個列表並將項目放在「列表」上?
有人可以爲Delphi提供一個完整的Bson庫嗎? 我試圖從http://bsonspec.org使用http://code.google.com/p/pebongo/source/browse/trunk/_bson.pas,但有一些結構不受支持。Delphi的Bson庫?
或者我沒有正確使用它,就像這個類沒有文檔我找不到正確的用法。
我想創建一個項目列表,這個項目是我的可序列化的對象。
但如何創建一個列表並將項目放在「列表」上?
我之前爲Delphi創建了一個BSON實現,主要基於Delphi中的現有Variant類型(及其TVarType)。它也支持變種陣列。
看到bsonDoc.pas: https://github.com/stijnsanders/TMongoWire
我需要序列化一個對象列表,然後通過網絡發送並反序列化它。我可以在你的實施中做到嗎? – Haruki 2011-06-07 13:03:32
@Hrukai無論誰是我的同事 – 2011-06-07 15:32:29
我遇到了同樣的麻煩和黑客攻擊的源代碼位。下面是我再熟:
procedure TBSONDocument.ReadStream(F: TStream);
var
len : Integer;
elmtype : Byte;
elmname : string;
begin
Clear;
F.Read(len, SizeOf(len));
F.Read(elmtype, SizeOf(Byte));
while elmtype <> BSON_EOF do
begin
elmname := _ReadString(F);
SetLength(FItems, Length(FItems)+1);
case elmtype of
BSON_FLOAT: FItems[High(FItems)] := TBSONDoubleItem.Create;
BSON_STRING: FItems[High(FItems)] := TBSONStringItem.Create;
BSON_DOC: FItems[High(FItems)] := TBSONDocumentItem.Create; // Mrsky
BSON_ARRAY: FItems[High(FItems)] := TBSONArrayItem.Create;
BSON_BINARY: FItems[High(FItems)] := TBSONBinaryItem.Create;
BSON_OBJECTID: FItems[High(FItems)] := TBSONObjectIDItem.Create;
BSON_BOOLEAN: FItems[High(FItems)] := TBSONBooleanItem.Create;
BSON_DATETIME: FItems[High(FItems)] := TBSONDatetimeItem.Create(0); // Mrsky
BSON_REGEX: FItems[High(FItems)] := TBSONRegExItem.Create;
BSON_DBPTR: FItems[High(FItems)] := TBSONDBRefItem.Create;
BSON_JS: FItems[High(FItems)] := TBSONJSItem.Create;
BSON_SYMBOL: FItems[High(FItems)] := TBSONSymbolItem.Create;
BSON_JSSCOPE: FItems[High(FItems)] := TBSONScopedJSItem.Create;
BSON_INT32: FItems[High(FItems)] := TBSONIntItem.Create;
BSON_INT64: FItems[High(FItems)] := TBSONInt64Item.Create;
BSON_MINKEY: FItems[High(FItems)] := TBSONItem.Create(BSON_MINKEY);
BSON_MAXKEY: FItems[High(FItems)] := TBSONItem.Create(BSON_MAXKEY);
else
raise EBSONException.Create('Unimplemented element handler '+IntToStr(elmtype));
end;
with FItems[High(FItems)] do
begin
elname := elmname;
ReadStream(f);
end;
f.Read(elmtype, SizeOf(Byte));
end;
end;
我並不欣賞的方式「免費」的方法實現,將它們全部刪除,並引入了新的相應的「銷燬」析構函數的地方適合。
我希望這會對你有所幫助。
「不支持」? – 2011-06-06 20:30:11
您正在使用哪個Delphi庫以及您不需要支持哪些BSON功能? – 2011-06-06 20:42:32
圖書館位於鏈接和我在下面發佈的功能。 – 2011-06-06 20:48:12