По какой-то причине мне нужно сохранить несколько больших строк в профили пользователей. Поскольку свойство со строкой типа имеет ограничение в 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'.". Если я пытаюсь предоставить строковое значение, я получаю «Неверное двоичное значение: входные данные должны соответствовать двоичному типу данных byte []».
Тогда мой вопрос, как использовать этот двоичный тип?
Код, который у меня есть:
SPUser user = elevatedWeb.CurrentUser;
ServerContext context = ServerContext.GetContext (HttpContext.Current);
UserProfileManager profileManager = new UserProfileManager (context);
Профиль 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;
}