Xamarin.iOS, convert dictionary to NSDictionary

I am trying to integrate Branch.io into my Xamarin project and stumbled upon this requirement in order to convert a C # dictionary to NSDictionary.

Tried to

  • dictionary like NSDictionary // Doesn't work

Tried it also

private NSMutableDictionary BranchData (Dictionary<string, object> data) { List<string> keys = data.Keys.ToList(); NSMutableDictionary branchData = new NSMutableDictionary (); foreach (string key in keys) { branchData.Add (new NSString(key), data[key] as NSObject); } return branchData; } 

Does not work.

Any links would be helpful. Thanks!

UPDATE:

stack overflow

+5
source share
2 answers

This is how I converted the dictionary to NSDictionary

 var iconattrs = new Dictionary<string, string> { {"ITEMTYPE", "DIVESITE"}, {"LOCATION", diveSite.Location}, {"DESCRIPTION", diveSite.BriefDescription}, {"LINK", diveSite.Link}, {"ID", diveSite.ID.ToString()} }; var myResult = NSDictionary.FromObjectsAndKeys(iconattrs.Values.ToArray() ,iconattrs.Keys.ToArray()) 
+14
source

This works for me .. could be optimized or would be much smarter:

 private static NSMutableDictionary ConvertToNativeDictionary(Dictionary<string, object> dict) { NSMutableDictionary newDictionary = new NSMutableDictionary(); try { foreach (string k in dict.Keys) { var value = dict[k]; try { if (value is string) newDictionary.Add((NSString)k, new NSString((string)value)); else if (value is int) newDictionary.Add((NSString)k, new NSNumber((int)value)); else if (value is float) newDictionary.Add((NSString)k, new NSNumber((float)value)); else if (value is nfloat) newDictionary.Add((NSString)k, new NSNumber((nfloat)value)); else if (value is double) newDictionary.Add((NSString)k, new NSNumber((double)value)); else if (value is bool) newDictionary.Add((NSString)k, new NSNumber((bool)value)); else if (value is DateTime) newDictionary.Add((NSString)k, ((DateTime)value).DateTimeToNSDate()); else newDictionary.Add((NSString)k, new NSString(value.ToString())); } catch (Exception Ex) { if (value != null) Ex.Data.Add("value", value); Logger.LogException(Ex); continue; } } } catch (Exception Ex) { Logger.LogException(Ex); } return newDictionary; } 

And this is NSDate Conversion:

 public static class NSDateExtensions { public static DateTime NSDateToDateTime(this NSDate date) { DateTime reference = TimeZone.CurrentTimeZone.ToLocalTime( new DateTime(2001, 1, 1, 0, 0, 0)); return reference.AddSeconds(date.SecondsSinceReferenceDate); } public static NSDate DateTimeToNSDate(this DateTime date) { DateTime reference = TimeZone.CurrentTimeZone.ToLocalTime( new DateTime(2001, 1, 1, 0, 0, 0)); return NSDate.FromTimeIntervalSinceReferenceDate( (date - reference).TotalSeconds); } } 
0
source

Source: https://habr.com/ru/post/1245132/


All Articles