/// <summary>
        /// Gets the object from Json properties.
        /// </summary>
        /// <param name="reader">The <see cref="T: Newtonsoft.Json.JsonReader" /> to read from, reader must be placed at first property.</param>
        /// <returns>The object Value.</returns>
        internal static PrimaryReplicatorStatus GetFromJsonProperties(JsonReader reader)
        {
            var replicationQueueStatus = default(ReplicatorQueueStatus);
            var remoteReplicators      = default(IEnumerable <RemoteReplicatorStatus>);

            do
            {
                var propName = reader.ReadPropertyName();
                if (string.Compare("ReplicationQueueStatus", propName, StringComparison.Ordinal) == 0)
                {
                    replicationQueueStatus = ReplicatorQueueStatusConverter.Deserialize(reader);
                }
                else if (string.Compare("RemoteReplicators", propName, StringComparison.Ordinal) == 0)
                {
                    remoteReplicators = reader.ReadList(RemoteReplicatorStatusConverter.Deserialize);
                }
                else
                {
                    reader.SkipPropertyValue();
                }
            }while (reader.TokenType != JsonToken.EndObject);

            return(new PrimaryReplicatorStatus(
                       replicationQueueStatus: replicationQueueStatus,
                       remoteReplicators: remoteReplicators));
        }
        /// <summary>
        /// Gets the object from Json properties.
        /// </summary>
        /// <param name="reader">The <see cref="T: Newtonsoft.Json.JsonReader" /> to read from, reader must be placed at first property.</param>
        /// <returns>The object Value.</returns>
        internal static SecondaryReplicatorStatus GetFromJsonProperties(JsonReader reader)
        {
            var kind = default(ReplicaRole?);
            var replicationQueueStatus = default(ReplicatorQueueStatus);
            var lastReplicationOperationReceivedTimeUtc = default(DateTime?);
            var isInBuild       = default(bool?);
            var copyQueueStatus = default(ReplicatorQueueStatus);
            var lastCopyOperationReceivedTimeUtc = default(DateTime?);
            var lastAcknowledgementSentTimeUtc   = default(DateTime?);

            do
            {
                var propName = reader.ReadPropertyName();
                if (string.Compare("Kind", propName, StringComparison.Ordinal) == 0)
                {
                    kind = ReplicaRoleConverter.Deserialize(reader);
                }
                else if (string.Compare("ReplicationQueueStatus", propName, StringComparison.Ordinal) == 0)
                {
                    replicationQueueStatus = ReplicatorQueueStatusConverter.Deserialize(reader);
                }
                else if (string.Compare("LastReplicationOperationReceivedTimeUtc", propName, StringComparison.Ordinal) == 0)
                {
                    lastReplicationOperationReceivedTimeUtc = reader.ReadValueAsDateTime();
                }
                else if (string.Compare("IsInBuild", propName, StringComparison.Ordinal) == 0)
                {
                    isInBuild = reader.ReadValueAsBool();
                }
                else if (string.Compare("CopyQueueStatus", propName, StringComparison.Ordinal) == 0)
                {
                    copyQueueStatus = ReplicatorQueueStatusConverter.Deserialize(reader);
                }
                else if (string.Compare("LastCopyOperationReceivedTimeUtc", propName, StringComparison.Ordinal) == 0)
                {
                    lastCopyOperationReceivedTimeUtc = reader.ReadValueAsDateTime();
                }
                else if (string.Compare("LastAcknowledgementSentTimeUtc", propName, StringComparison.Ordinal) == 0)
                {
                    lastAcknowledgementSentTimeUtc = reader.ReadValueAsDateTime();
                }
                else
                {
                    reader.SkipPropertyValue();
                }
            }while (reader.TokenType != JsonToken.EndObject);

            return(new SecondaryReplicatorStatus(
                       kind: kind,
                       replicationQueueStatus: replicationQueueStatus,
                       lastReplicationOperationReceivedTimeUtc: lastReplicationOperationReceivedTimeUtc,
                       isInBuild: isInBuild,
                       copyQueueStatus: copyQueueStatus,
                       lastCopyOperationReceivedTimeUtc: lastCopyOperationReceivedTimeUtc,
                       lastAcknowledgementSentTimeUtc: lastAcknowledgementSentTimeUtc));
        }