यह मेरी JSON स्ट्रिंग है जो सिर्फ एक साधारण सूची का प्रतिनिधित्व करती है: {"accelerationsList":"[-3.1769, 3.304, 6.3455997, 3.1701]"}

और यह मेरा सी # कोड deserialize करने के लिए है:

HttpContent requestContent = Request.Content;
string jsonContent = requestContent.ReadAsStringAsync().Result; // i know about deadlock...
List<float> accelerationsList = new JavaScriptSerializer().Deserialize<List<float>>(jsonContent);

मुझे नहीं पता कि मेरी एक्सेलेरेशन लिस्ट खाली क्यों है! कोई सुझाव?

0
Iutho 7 पद 2019, 19:49
3
शायद इसलिए कि यह JSON में एक स्ट्रिंग है, न कि फ़्लोट्स की सूची। साथ ही, आपको एक प्रकार की आवश्यकता है जो JSON objct का प्रतिनिधित्व करता है। यहां देखें
 – 
Biesi Grr
7 पद 2019, 19:53
1
क्या वह वास्तव में आपका JSON है? क्या सरणी वास्तव में एक स्ट्रिंग है? या यह वास्तव में एक सरणी है?
 – 
haldo
7 पद 2019, 19:57
हाँ, यह मेरा JSON और त्वरण है सूची यह मेरे जावा कोड से आया है: List<Float> accelerationsList = new ArrayList<>();
 – 
Iutho
7 पद 2019, 20:08
आपका जेसन फ्लोट की एक सरणी नहीं है, यह accelerationsList नामक संपत्ति के साथ एक वस्तु है जिसमें एक स्ट्रिंग मान है, जिसकी सामग्री फ्लोट की जेसन सरणी की तरह दिखती है।
 – 
ESG
7 पद 2019, 20:21

2 जवाब

सबसे बढ़िया उत्तर

Newtonsoft.Json का प्रयोग करें, यह इसे साफ करता है

string accelerationsListString = Newtonsoft.Json.JsonConvert.DeserializeObject<Dictionary<string, string>>(jsonContent)["accelerationsList"];
List<float> accelerationsList = Newtonsoft.Json.JsonConvert.DeserializeObject<List<float>>(accelerationsListString);

आपको एक स्ट्रिंग में फ्लोट की सूची मिलती है, इसलिए हमें निकालने के बाद स्ट्रिंग को सूची में बदलने की आवश्यकता है

1
Vignesh Prasad V 7 पद 2019, 20:34
Newtonsoft.Json.JsonSerializationException: 'System.Collections.Generic.List1[System.Single]'. Path 'accelerationsList', line 1, position 50.' Inner Exception ArgumentException: Could not cast or convert from System.String to System.Collections.Generic.List1[System.Single] टाइप करने के लिए "[-3.6553, -3.1338, -3.1062]" मान बदलने में त्रुटि।
 – 
Iutho
7 पद 2019, 20:19
आपको एक स्ट्रिंग में फ्लोट की सूची मिलती है, इसलिए हमें निकालने के बाद स्ट्रिंग को सूची में बदलने की आवश्यकता है। यह काम करेगा
 – 
Vignesh Prasad V
7 पद 2019, 20:35
मुझे लगता है कि आपको मिल गया, धन्यवाद! अब मुझे ऐसा ही करने की ज़रूरत है लेकिन एक सूची के लिए <ऑब्जेक्ट> तो शायद आप जल्द ही आह
 – 
Iutho
7 पद 2019, 20:38

मेरा मानना ​​​​है कि आपके पास 1 अंक को छोड़कर जो कुछ भी आप ढूंढ रहे हैं वह आपके पास है।

आप पूरी सामग्री (जेसन स्ट्रिंग) को सूची में बदलने की कोशिश कर रहे हैं। त्वरण सूची का मान प्राप्त करने के लिए आपको जेसन ऑब्जेक्ट को ठीक से कनवर्ट करने की आवश्यकता है, फिर स्ट्रिंग को कनवर्ट करें जो आपकी फ़्लोट्स की सूची ठीक से है।

string jsonContent = @"{""accelerationsList"":""[-3.1769, 3.304, 6.3455997, 3.1701]""}";
var stringRepOfArray = JObject.Parse(jsonContent)["accelerationsList"].ToString();

List<float> floatList = new JavaScriptSerializer().Deserialize<List<float>>(stringRepOfArray);

आउटपुट:

floatList
Count = 4
    [0]: -3.1769
    [1]: 3.304
    [2]: 6.34559965
    [3]: 3.1701
1
Jawad 7 पद 2019, 20:28