मैं मानक डेल्फी धारावाहिक का उपयोग कर मानक डेल्फी कंटेनर को क्रमबद्ध/deserialize करने का प्रयास करें।एक deserialized TDictionary सही तरीके से क्यों काम नहीं करता है?
procedure TForm7.TestButtonClick(Sender: TObject);
var
dict: TDictionary<Integer, Integer>;
jsonValue: TJSONValue;
begin
//serialization
dict := TDictionary<Integer, Integer>.Create;
dict.Add(1, 1);
jsonValue := TJsonConverter.ObjectToJSON(dict);
dict.Free;
//deserialization
dict := TJsonConverter.JSONToObject(jsonValue) as TDictionary<Integer, Integer>;
try
Assert(dict.ContainsKey(1), 'deserialization error - key not found');
except
Assert(false, 'deserialization error - dict object broken');
end;
end;
एक तरीका है जिसे मैं ऑब्जेक्ट को जेएसओएन में परिवर्तित करता हूं और इसके विपरीत;
class function TJsonConverter.JSONToObject(AJSONValue: TJSONValue): TObject;
var
lUnMarshal: TJSONUnMarshal;
begin
lUnMarshal := TJSONUnMarshal.Create();
try
Result := lUnMarshal.Unmarshal(AJSONValue);
finally
lUnMarshal.Free;
end;
end;
class function TJsonConverter.ObjectToJSON(AData: TObject): TJSONValue;
var
lMarshal: TJSONMarshal;
begin
lMarshal := TJSONMarshal.Create();
try
Result := lMarshal.Marshal(AData);
finally
lMarshal.Free;
end;
end;
लाइन:
dict := TJsonConverter.JSONToObject(jsonValue) as TDictionary<Integer, Integer>;
सही ढंग से शब्दकोश का निर्माण नहीं करता। यहाँ कैसे dict निर्माता द्वारा बनाने दिखता है: [
और यहाँ अक्रमांकन द्वारा बनाई dict है:
मैं इसे कैसे ठीक कर सकते हैं?
संपादित करें: यहाँ समस्या यह है कि TJSONMarshal
शब्दकोश RTTI का उपयोग कर instantiating है JSON सामग्री
{
"type" : "System.Generics.Collections.TDictionary<System.Integer,System.Integer>",
"id" : 1,
"fields" : {
"FItems" : [
[ -1, 0, 0 ],
[ -1, 0, 0 ],
[ -1, 0, 0 ],
[ 911574339, 1, 1 ]
],
"FCount" : 1,
"FGrowThreshold" : 3,
"FKeyCollection" : null,
"FValueCollection" : null
}
}
आप JSON सामग्री जोड़ सकते हैं? – mjn