Xamarin.iOS, convert Dictionary to NSDictionary

让人想犯罪 __ 提交于 2019-12-06 20:57:57

问题


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


回答1:


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())



回答2:


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

}


来源:https://stackoverflow.com/questions/36027542/xamarin-ios-convert-dictionary-to-nsdictionary

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!