Xamarin Forms IOS - NSData из строки JSON - PullRequest
0 голосов
/ 07 июня 2019

Я пытаюсь получить NSData из строки json, чтобы потом использовать его для создания MGLShape (из Mapbox SDK) следующим образом:

MGLShape.ShapeWithData(jsonData, 4, out error); //jsonData is the NSData, 4 is the nuint for the type of encoding and ou error is a plain NSError.

Но я не могу сериализоватьстрока json в NSData с использованием NSJsonSerialization, строка json исправляется и проверяется ранее (но когда я использую строку NSString из строки, она добавляет дополнительную пару скобок "{// json}", которую я могу удалить, прежде чем пытаться выполнить NSJsonSerializationВот как я пытаюсь достичь своей цели:

string jsonSerialized = JsonConvert.SerializeObject(fc);//Valid Json
NSString json = new NSString(jsonSerialized);//Adds the extra pair of brackets
NSData jsonData = NSJsonSerialization.Serialize(json, NSJsonWritingOptions.SortedKeys, out error);

Но это дает мне следующую ошибку:

Foundation.MonoTouchException: Objective-C exception thrown.  Name: NSInvalidArgumentException Reason: *** +[NSJSONSerialization dataWithJSONObject:options:error:]: Invalid top-level type in JSON write

Эта ошибка происходит с или без дополнительной парыскобки (убрал первый и последний символы из строки NSS), вот сокращенная версия моего json: (я использовал https://jsonformatter.curiousconcept.com/ для проверки json)

{
   "type":"FeatureCollection",
   "crs":null,
   "features":[
      {
         "type":"Feature",
         "geometry":{
            "type":"Point",
            "coordinates":[
               -9.000000,
               38.000000
            ]
         },
         "properties":{
            "id":1,
            "icon":"MyIcon.png"
         }
      }
   ]
}

Что я делаю неправильноздесь? Как я могу разобрать строку JSON в NSData?

1 Ответ

1 голос
/ 07 июня 2019

Нашел супер простое решение:

NSData jsonData = NSData.FromString(jsonSerialized, NSStringEncoding.UTF8);
...