Я использую Amazon DynamoDB в первый раз (и это потрясающе). Я работаю с моей моделью сохранения объектов, поэтому я использую свои собственные объекты для отправки туда и обратно. Это отлично работает на моих примитивных свойствах (строки и т. Д.). Однако у меня также есть свойство, которое представляет собой список других настраиваемых объектов, которые я хотел бы сохранить, и я не могу получить это, чтобы зафиксировать БД. Это список пользовательских объектов; каждый объект имеет несколько примитивных свойств и другой список пользовательских объектов (и на них есть только примитивы). Я нашел это:Amazon DynamoDB хранит список настраиваемых объектов
http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/ArbitraryDataMappingHLAPI.html
и попытались скопировать его, но не могу заставить его работать. Я также нашел это на хранящих картах:
http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/DataModel.html#DataModel.DataTypes
, но это не на самом деле, кажется, напрямую работать с объектами, если я что-то не хватает. Во всяком случае здесь преобразователь я придумал:
public class AwsCommentConverter : IPropertyConverter
{
public object FromEntry(DynamoDBEntry entry)
{
PrimitiveList primList = entry as PrimitiveList;
if (primList == null)
{ throw new ArgumentOutOfRangeException(); }
List<CommentVM> comments = new List<CommentVM>();
foreach (string s in primList.AsListOfString())
{
string[] vals = s.Split(new string[] { "$~$" }, StringSplitOptions.None);
if (vals.Length < 3) throw new ArgumentOutOfRangeException();
List<StatusUpdate> updates = new List<StatusUpdate>();
for (int i = 2; i < vals.Length; i++)
{
string[] udVals = vals[i].Split(new string[] { "#@#" }, StringSplitOptions.None);
if (udVals.Length != 4) throw new ArgumentOutOfRangeException();
StatusUpdate ud = new StatusUpdate()
{
StatusType = (StatusUpdate.StatusUpdateType)Enum.Parse(typeof(StatusUpdate.StatusUpdateType), udVals[0]),
StatusDate = DateTime.FromFileTime(long.Parse(udVals[1])),
UserName = udVals[2],
NewValue = udVals[3]
};
updates.Add(ud);
}
comments.Add(new CommentVM(vals[0], vals[1], updates));
}
return comments;
}
public DynamoDBEntry ToEntry(object value)
{
List<CommentVM> comments = value as List<CommentVM>;
List<Primitive> storageVals = new List<Primitive>();
if (comments == null) throw new ArgumentOutOfRangeException();
foreach (CommentVM cm in comments)
{
string dta = cm.ID + "$~$" + cm.CommentText + "$~$";
foreach (StatusUpdate ud in cm.StatusLog)
{ dta += ud.StatusType.ToString() + "#@#" + ud.StatusDate.ToFileTime().ToString() + "#@#" + ud.UserName + "#@#" + ud.NewValue + "$~$"; }
if (dta.EndsWith("$~$"))
{ dta = dta.Substring(0, dta.Length - 3); }
storageVals.Add(new Primitive() { Value = dta });
}
return new PrimitiveList() { Entries = storageVals };
}
}
Вот декларация собственности:
[DynamoDBProperty(typeof(AwsCommentConverter))]
public List<CommentVM> Comments
я поставил точку останова в конвертере и кажется, никогда не получить удар, который заставляет меня верить, Я перепутал настройку, но я не знаю, как ... Может ли кто-нибудь сказать мне, как это сохранить и получить?