Aws-sdk-net: рдбреЗрдЯрдЯрд╛рдЗрдо DocumentModel рдХреЗ рд╕рд╛рде рд░рд╛рдЙрдВрдб рдЯреНрд░рд┐рдк рдХреНрд░рдорд╛рдВрдХрди рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 2 рдЬреБрд▓ре░ 2014  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: aws/aws-sdk-net

DocumentModel рдкреНрд░рд┐рдорд┐рдЯрд┐рд╡ рд░рд╛рдЙрдВрдб рдЯреНрд░рд┐рдк рдХреНрд░рдорд╛рдВрдХрди рдХрд╛ рдареАрдХ рд╕реЗ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдЯрд╛рдЗрдордЬрд╝реЛрди рдФрд░ рдорд┐рд▓реАрд╕реЗрдХрдВрдб рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╕рдВрд░рдХреНрд╖рд┐рдд рд╣реИрдВ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбреЗрдЯрдЯрд╛рдЗрдо рдХреЛ рдХреНрд░рдордмрджреНрдз рдХрд░рддреЗ рд╕рдордп рдкреНрд░рд╛рд░реВрдк рд╡рд┐рдирд┐рд░реНрджреЗрд╢рдХ "рдУ" рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдореИрдВрдиреЗ рдбреЗрдЯрдЯрд╛рдЗрдо рдФрд░ NullableDateTime рдХреЗ рд▓рд┐рдП рд╕рд╣реА рдХреНрд░рдорд╛рдВрдХрди рдХреЛ рдЪрд┐рддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдиреАрдЪреЗ рдПрдХ IPropertyConverter рдмрдирд╛рдпрд╛ рд╣реИред

using Amazon.DynamoDBv2.DataModel;
using Amazon.DynamoDBv2.DocumentModel;
using System.Globalization;

/// <summary>
/// The <see cref="IPropertyConverter"/> to properly support round-trip serialization of <see cref="DateTime"/>.
/// </summary>
public class RoundTripNullableDateTimeTypeConverter : IPropertyConverter
{
    /// <summary>
    /// Converts the <c>value</c> to a <see cref="Primitive"/>.
    /// </summary>
    /// <param name="value">The value to convert.</param>
    /// <returns>The primitive of the <c>value</c>.</returns>
    public DynamoDBEntry ToEntry(object value)
    {
        var date = value as DateTime?;
        return new Primitive 
        {
            Value = date.HasValue ? date.Value.ToString("o", CultureInfo.InvariantCulture) : null
        };
    }

    /// <summary>
    /// Converts the <c>entry</c> to <see cref="DateTime"/>.
    /// </summary>
    /// <param name="entry">The entry to convert.</param>
    /// <returns>The date time of the entry.</returns>
    public object FromEntry(DynamoDBEntry entry)
    {
        var entryString = entry.AsString();
        if (string.IsNullOrEmpty(entryString))
            return null;
        else
            return DateTime.ParseExact(entryString, "o", CultureInfo.InvariantCulture, DateTimeStyles.RoundtripKind);
    }
}

/// <summary>
/// The <see cref="IPropertyConverter"/> to properly support round-trip serialization of <see cref="DateTime"/>.
/// </summary>
public class RoundTripDateTimeTypeConverter : IPropertyConverter
{
    /// <summary>
    /// Converts the <c>value</c> to a <see cref="Primitive"/>.
    /// </summary>
    /// <param name="value">The value to convert.</param>
    /// <returns>The primitive of the <c>value</c>.</returns>
    public DynamoDBEntry ToEntry(object value)
    {
        return new Primitive
        {
            Value = ((DateTime)value).ToString("o", CultureInfo.InvariantCulture)
        };
    }

    /// <summary>
    /// Converts the <c>entry</c> to <see cref="DateTime"/>.
    /// </summary>
    /// <param name="entry">The entry to convert.</param>
    /// <returns>The date time of the entry.</returns>
    public object FromEntry(DynamoDBEntry entry)
    {
        return DateTime.ParseExact(entry.AsString(), "o", CultureInfo.InvariantCulture, DateTimeStyles.RoundtripKind);
    }
}

рдХреБрдЫ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╕рдВрджрд░реНрдн:

рд╕рднреА 3 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдЗрд╕ рдкрд░рд╡рд░рд┐рд╢ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдЬреИрд╕рд╛ рдХрд┐ рдЖрдкрдиреЗ рдмрддрд╛рдпрд╛ рдХрд┐ рд╡рд░реНрддрдорд╛рди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЖрдИрдПрд╕рдУ 8601 рдпреВрдЯреАрд╕реА рдкреНрд░рд╛рд░реВрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рд╕рдордп рдХреНрд╖реЗрддреНрд░ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдФрд░ "рдУ" рдкреНрд░рд╛рд░реВрдк рдХреЗ рд╕рд╛рде рд╕рдВрднрд╡ рд╕реЗ рдХрдо рд╕рдЯреАрдХрддрд╛ рд╣реИред

рдЗрд╕ рдкреНрд░рд╛рд░реВрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдореВрд▓ рдирд┐рд░реНрдгрдп рд╕рднреА рдПрдбрдмреНрд▓реНрдпреВрдПрд╕ рдПрд╕рдбреАрдХреЗ рдореЗрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдЬреЛ рдПрдХ рдЙрдЪреНрдЪ-рд╕реНрддрд░реАрдп рдбрд╛рдпрдиреЗрдореЛрдбреАрдмреА рдПрдкреАрдЖрдИ (рдиреЗрдЯ рдореЗрдВ рдЯреЗрдмрд▓ рдФрд░ рдбрд╛рдпрдиреЗрдореЛрдбреАрдмреАрдХреЙрдиреНрдЯреЗрдХреНрд╕реНрдЯ, рдЬрд╛рд╡рд╛ рдореЗрдВ рдбрд╛рдпрдиреЗрдореЛрдбреАрдмреАрдореИрдкрд░, рдЖрджрд┐) рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВред рдЖрдИрдПрд╕рдУ 8601 рдпреВрдЯреАрд╕реА рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рддрд╛рд░реАрдЦреЛрдВ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рд╕реЗ рд▓рдЧрд╛рддрд╛рд░ рдЦреЛрдЬ рдФрд░ рд╕реЙрд░реНрдЯрд┐рдВрдЧ рдХреА рдЕрдиреБрдорддрд┐ рдорд┐рд▓рддреА рд╣реИ, рдЬреЛ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИ рдпрджрд┐ рдЯрд╛рдЗрдордЬрд╝реЛрди рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ: рдЕрдзрд┐рдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдорд╛рдиреЛрдВ рдХрд╛ рдЕрд░реНрде "рдЕрдзрд┐рдХ" рджрд┐рдирд╛рдВрдХ рдорд╛рди рдирд╣реАрдВ рд╣реИ, рдФрд░ рдПрдХ "рдЕрджреНрд╡рд┐рддреАрдп" рддрд┐рдерд┐ рдХреЗ рд▓рд┐рдП рдПрдХрд╛рдзрд┐рдХ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рд╣реЛрдирд╛ рд╕рдВрднрд╡ рд╣реИред рдЙрддреНрддрд░рд╛рд░реНрджреНрдз рд╕рднреА рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛рдПрдВ рдкреИрджрд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рди рдХрд┐ рдХреЗрд╡рд▓ рдЦреЛрдЬ (рдХреНрд╡реЗрд░реА рдФрд░ рд╕реНрдХреИрди): рдпрджрд┐ рдПрдХ рдХреБрдВрдЬреА рдХреЗ рд░реВрдк рдореЗрдВ рдбреЗрдЯрдЯрд╛рдЗрдо рд╡рд╛рд▓рд╛ рдХреЛрдИ рдЖрдЗрдЯрдо рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЯрд╛рдЗрдордЬрд╝реЛрди рдХреЗ рд╕рд╛рде рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЗрд╕реЗ рдХреЗрд╡рд▓ рддрднреА рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬрдм рдЙрд╕реА рд╕рдЯреАрдХ рдЯрд╛рдЗрдордЬрд╝реЛрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рддреЛ рдХрд┐рд╕реА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдХреИрд╕реЗ рд╕рдВрд░рдЪрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреЗ рд╣реБрдП, рд╕рдордп рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдмрджрд▓рд╛рд╡ рд╕реЗ рд╕рднреА рдбреЗрдЯрд╛ рдХреЙрд▓ рд╡рд┐рдлрд▓ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдХреБрдВрдЬреА рдореЗрд▓ рдирд╣реАрдВ рдЦрд╛рдПрдЧреАред

.NET SDK рдореЗрдВ рдЙрдкрд░реЛрдХреНрдд рдкрд░рд┐рд╡рд░реНрддрди рдХрд░рдирд╛ рдЙрди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдкрд░рд┐рд╡рд░реНрддрди рд╣реЛрдЧрд╛, рдЬреЛ рдХрдИ SDK рдпрд╛ .NET SDK рдХреЗ рд╡рд┐рднрд┐рдиреНрди рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдЧреИрд░-рдЕрдкрдбреЗрдЯ рдХрд┐рдП рдЧрдП рдХреНрд▓рд╛рдЗрдВрдЯ рдирдП рд╕реНрд╡рд░реВрдкреЛрдВ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдореЗрдВ рдЕрд╕рдорд░реНрде рд╣реЛрдВрдЧреЗред рд▓реЗрдХрд┐рди рдкреНрд░рджрд╛рди рдХрд┐рдП рдЧрдП рдХрдиреНрд╡рд░реНрдЯрд░реНрд╕ рдЯрд╛рдЗрдордЬрд╝реЛрди рдХреЗ рд╕рд╛рде рдЙрдЪреНрдЪ-рд╕рдЯреАрдХ рддрд┐рдерд┐рдпреЛрдВ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрддреНрдХреГрд╖реНрдЯ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╣реИрдВ, рдЬрдм рддрдХ рдХрд┐ рдбреЗрдЯрд╛ рдХреЛ рд╕рдорд╛рди рд╕реНрд╡рд░реВрдкрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд▓рдЧрд╛рддрд╛рд░ рдкрдврд╝рд╛ рдФрд░ рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдХреБрдЫ рдЙрд▓реНрд▓рд┐рдЦрд┐рдд рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИред

@PavelSafronov , рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!

рдЬрд┐рд╕ рдХрд╛рд░рдг рд╕реЗ рдореИрдВрдиреЗ рдЗрд╕реЗ рд▓рд╛рдпрд╛ рд╡рд╣ рдпреВрдЯреАрд╕реА рддрд┐рдерд┐ рдХреЛ рд╕рд╣реЗрдЬрдиреЗ рдХрд╛ рдПрдХ рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рдерд╛, рдлрд┐рд░ рдЖрдЗрдЯрдо рд▓рд╛рдиреЗ рдкрд░ рдпрд╣ рд╕реНрдерд╛рдиреАрдп рд╕рдордпрдХреНрд╖реЗрддреНрд░ рдореЗрдВ рд╡рд╛рдкрд╕ рдЖ рдЧрдпрд╛ред рдпреВрдЯреАрд╕реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдбреЗрдЯрд╛ рдХреЛ рдареАрдХ рд╕реЗ рд╕реНрдЯреЛрд░ рдФрд░ рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдкреАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдпрд╣ рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рд╣реИред рдПрдкреАрдЖрдИ рдорд╛рдирддрд╛ рд╣реИ рдХрд┐ рдЖрдиреЗ рд╡рд╛рд▓реА рдбреЗрдЯрдЯрд╛рдЗрдо рдпреВрдЯреАрд╕реА рдирд╣реАрдВ рд╣реИ рдЗрд╕рд▓рд┐рдП, рдпрд╣ рдорд╛рдирддрд╛ рд╣реИ рдХрд┐ рдЙрдиреНрд╣реЗрдВ deserialization рдкрд░ рд╕реНрдерд╛рдиреАрдп рд╕рдордп рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рддреЛ рдпрд╣ рдПрдХ рдЕрд╕рдВрдЧрдд рдзрд╛рд░рдгрд╛ рдмрдирд╛рддрд╛ рд╣реИред

рдореИрдВрдиреЗ AWSSDK.DynamoDBv2.Converters рдирд╛рдордХ рдПрдХ Nuget рдкреИрдХреЗрдЬ рдХреЛ рдПрдХ рд╕рд╛рде рд░рдЦрд╛ рд╣реИ рддрд╛рдХрд┐ рддрд╛рд░реАрдЦреЛрдВ рдХреЗ рд▓рдЧрд╛рддрд╛рд░ рдХреНрд░рдордмрджреНрдз рд╡реНрдпрд╡рд╣рд╛рд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╡рд╛рд▓реЗ рдЕрдиреНрдп рд▓реЛрдЧреЛрдВ рдХреА рдорджрдж рдХреА рдЬрд╛ рд╕рдХреЗред (рд╕реНрд░реЛрдд GitHub рдкрд░

рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЬрд╛рдирдХрд╛рд░реА рдЯреАрдо рдХреА рдорджрдж рдХрд░реЗрдЧреАред

рдКрдкрд░ рд▓рд┐рдВрдХ рдХрд┐рдП рдЧрдП рдХрдиреНрд╡рд░реНрдЯрд░реНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ @radleta рдХреЗ рд╕рдорд╛рди рдЙрдкрдпреЛрдЧ-рдорд╛рдорд▓рд╛ рд╣реИред рдореБрдЦреНрдп рдПрд╕рдбреАрдХреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рд░реВрдкрд╛рдВрддрд░рдгреЛрдВ рдХреЛ рдЕрдкрдбреЗрдЯ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рд╕реЗ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрджрд▓рд╛рд╡ рдЖрдПрдЧрд╛ред

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

ShahriatHossain picture ShahriatHossain  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

Rodrigo-Andrade picture Rodrigo-Andrade  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

McDoit picture McDoit  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

jpwinz91 picture jpwinz91  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

imkheong picture imkheong  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ