Как сохранить IList (Коллекция) C # как документ Json в DynamoDb - PullRequest
0 голосов
/ 26 сентября 2019

У меня есть приложение ASP.Net Core 2.1, которое использует DynamoDb в качестве Db (NoSql)

DTO

public class CustomerTO
{  
 public string Id{get; set;}
 public string Name {get; set;}
 public IList<Contact> Contacts {get; set;}
}


public class Contact
{
 public string Number {get; set;}
 public string Address { get; set;}
}

Я использую API низкого уровня для DynamoDb CRUD.Вот как мой метод выглядит как

public async Task<CustomerTO> Add(CustomerTO obj)
    {
        try
        {

            var res = await _dynamoClient.PutItemAsync(tableName: _tableName, item: SetObject(obj));
            if (res.HttpStatusCode == System.Net.HttpStatusCode.OK)
            {
                return obj;
            }
            else
            {
                //throw new Exception("Error" + res);
            }
        }
        catch (Exception ex)
        {

            Logger.Log(ex);
            return null;
        }
    }

    private Dictionary<string, AttributeValue> SetObject(CustomerTO obj)
    {


        //DynamoDb - Using Low Level API
        var attributes = new Dictionary<string,
        AttributeValue> {
            //Id
            {
                nameof(obj.Id),
                new AttributeValue {
                    S = obj.Id
                }
            },

            //Name
            {
                nameof(obj.Name),
                new AttributeValue {
                    S = obj.Name
                }
            },
            {
                nameof(obj.Contacts),
                new AttributeValue
                {
                   S = JsonConvert.SerializeObject(obj.Contacts)
                }
            }
        };

        //attributes[nameof(obj.Contacts)] = Document.FromJson(obj.Contacts);
        return attributes;
    }

Это сохраняет поля «Контакты» в виде строки с escape-символами в виде

[\r\n  {\r\n    \"Number\": \"a6e8003e-3991-4f0c-a47f-49b26d6d83c0\",\r\n    \"Address\": \"Free\"}]

Поскольку я передаю в виде строки, настолько очевидно, что это будетсохранить как строку.

Но как мне преобразовать эти контакты в поля, чтобы они сохранялись в виде строки Array, List (L) или JSON без escape-символов?

Спасибо!

1 Ответ

0 голосов
/ 26 сентября 2019

Может быть, вы можете использовать Newtonsoft для преобразования его в тип данных, который вы хотите.Рассмотрите возможность перехода от динамического типа к списку или массиву

Newtonsoft.Json.JsonConvert.DeserializeObject<dynamic>(jsonString);

Или используйте

JavaScriptSerializer под System.Web.Script.Serialization или

JavaScriptSerializer serializer = new JavaScriptSerializer();
dynamic jsonObject = serializer.Deserialize<dynamic>(jsonString);

Json.Decode под System.Web.Helpers

dynamic jsonObject = Json.Decode(json);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...