По какой-то причине мне нужно сохранить несколько больших строк в профилях пользователей. Поскольку свойство со строковым типом имеет ограничение в 400 символов, я решил попробовать двоичный тип (PropertyDataType.Binary), который допускает длину 7500. Моя идея состоит в том, чтобы преобразовать строку, которая у меня есть, в двоичную и сохранить в свойство.
Я создаю свойство, используя код:
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 = новый UserProfileManager (контекст); Профиль UserProfile = 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;
}