3

出于某种原因,我需要将一些大字符串保存到用户配置文件中。因为字符串类型的属性限制为 400 个字符,所以我决定尝试使用允许长度为 7500 的二进制类型 (PropertyDataType.Binary)。我的想法是将我拥有的字符串转换为二进制并保存到属性。

我使用代码创建属性:

            context = ServerContext.GetContext(elevatedSite);
            profileManager = new UserProfileManager(context);
            profile = profileManager.GetUserProfile(userLoginName);
            Property newProperty = profileManager.Properties.Create(false);
            newProperty.Name = "aaa";
            newProperty.DisplayName = "aaa";

            newProperty.Type = PropertyDataType.Binary;
            newProperty.Length = 7500;                

            newProperty.PrivacyPolicy = PrivacyPolicy.OptIn;
            newProperty.DefaultPrivacy = Privacy.Organization;
            profileManager.Properties.Add(newProperty);
            myProperty = profile["aaa"];
            profile.Commit();

问题是,当我尝试将 byte[] 类型的值提供给属性时,我收到错误“无法将 'System.Byte' 类型的对象转换为 'System.String' 类型。”。如果我尝试提供字符串值,则会收到“无效的二进制值:输入必须匹配二进制字节 [] 数据类型”。那么我的问题是如何使用这种二进制类型?

我拥有的代码:

SPUser 用户 = 提升的Web.CurrentUser;ServerContext 上下文 = ServerContext.GetContext(HttpContext.Current); UserProfileManager profileManager = new UserProfileManager(context); UserProfile profile = GetUserProfile(elevatedSite, currentUserLoginName); UserProfileValueCollection myProperty=profile[PropertyName];

myProperty.Value = StringToBinary(GenerateBigString());

和测试功能:

    private static string GenerateBigString()
    {
        StringBuilder sb = new StringBuilder();            
        for (int i = 0; i < 750; i++) sb.Append("0123456789");
        return sb.ToString();
    }

    private static byte[] StringToBinary(string theSource)
    {
        byte[] thebytes = new byte[7500];  
        thebytes = System.Text.Encoding.ASCII.GetBytes(theSource);
        return thebytes;
    }
4

2 回答 2

0

对于那些正在寻找答案的人。您必须改用Add方法:

var context = ServerContext.GetContext(elevatedSite);
var profileManager = new UserProfileManager(context);
var profile = profileManager.GetUserProfile(userLoginName);
profile["MyPropertyName"].Add(StringToBinary("your cool string"));
profile.Commit();
于 2012-02-07T13:18:42.693 回答
0

你试过用更小的琴弦吗?在第一次测试中达到最大值可能会隐藏其他行为。当您在调试器中检查生成的字符串时,它是否符合要求?(7500 字节[])

于 2010-02-22T03:08:26.060 回答