14

Am trying to integrate Branch.io in my Xamarin project and came across this requirement to convert c#'s Dictionary to NSDictionary.

Tried

  • dictionary as NSDictionary //Didn't work

Tried this as well

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; } 

Didn't work.

Any leads would be helpful. Thanks!

UPDATE:

https://stackoverflow.com/a/5664785/344798

2 Answers 2

36

This is how i converted a dictionary to an 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()) 
Sign up to request clarification or add additional context in comments.

1 Comment

Hi, how can I do it reverse? I mean NSDictionary to Dictionary<string,string>
0

This is working for me .. could be optimized ofcourse or 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); } } 

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.