IDictionary <string,object>对象有多个对象,如何分开?</string,object>

时间:2013-07-17 22:33:59

标签: c# membership-provider mongodb-.net-driver

我目前正在开发一个使用asp.net mvc4和mongodb作为数据库的网站。由于Microsoft成员资格提供程序仅支持SQL-DB,因此我将使用其他成员资格提供程序。我决定使用ExtendedMongoMembership Provider。只要我在创建帐户期间没有传递其他用户属性,一切都有效。当我尝试添加一些其他属性(如电子邮件)时,CreateUserRow函数的功能会抛出异常。我已经下载了源代码并尝试修复它。因此,我必须将对象内部的对象分开,这似乎是将必要的数据传递到函数中的方式。

 public bool CreateUserRow(string userName, IDictionary<string, object> values)
    {
        string userTableName = "Users";
        List<BsonElement> elements = new List<BsonElement>();
        elements.Add(new BsonElement("UserName", userName));
        elements.Add(new BsonElement("_id", GetNextSequence("user_id")));
        if (values != null)
        {
           // Here I'm facing the problem where I have to get the property names
           // and the values to add them to the elements list
           // The IDictionary is unfortunately not build in the way
           // propertyname,value so that I could get the entries in an easy way

        }

        var collection = _provider.GetCollection(userTableName);
        var result = collection.Insert(new BsonDocument(elements.ToArray()));
        return result.LastErrorMessage == null;
    }

IDictonary包含4个名为(Comparer,Count,Keys,Values)的键,键名及其计数是固定的。写入db的属性名称存储为对象内部的单个对象,该对象是Dictonary中具有键“Keys”的值。这同样适用于db的值,这些值也存储在对象中,该对象是具有键“Values”的值。我的问题是我不知道如何分离这些对象。这是一张显示调试会话期间字典结构的图片。

http://i.stack.imgur.com/h4z7I.jpg 我如何访问存储为值的对象内的对象?

编辑: 现在发现一种方式,有更好的方法吗?

        var propnames = ((IEnumerable<object>) values["Keys"]).ToArray();
        var propvalues = ((IEnumerable<object>)values["Values"]).ToArray();
        dynamic test;
        for (int i = 0; i < propnames.Count(); i++)
        {
            Type type = propvalues[i].GetType();

            test = Convert.ChangeType(propvalues[i], type.UnderlyingSystemType);
            //BsonValue bsonValue = test as BsonValue;
            elements.Add(new BsonElement(propnames[i] as string,test ));
        }

0 个答案:

没有答案