public override void WriteJson()

in shared/src/TwinJsonConverter.cs [49:188]


        public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
        {
            if (value == null)
            {
                return;
            }

            if (writer == null)
            {
                throw new ArgumentNullException(nameof(writer));
            }

            if (serializer == null)
            {
                throw new ArgumentNullException(nameof(serializer));
            }

            var twin = value as Twin;

            if (twin == null)
            {
                throw new InvalidOperationException("Object passed is not of type Twin.");
            }

            writer.WriteStartObject();

            if (!string.IsNullOrWhiteSpace(twin.ModelId))
            {
                writer.WritePropertyName(ModelId);
                writer.WriteValue(twin.ModelId);
            }

            writer.WritePropertyName(DeviceIdJsonTag);
            writer.WriteValue(twin.DeviceId);

            if (!string.IsNullOrWhiteSpace(twin.ModuleId))
            {
                writer.WritePropertyName(ModuleIdJsonTag);
                writer.WriteValue(twin.ModuleId);
            }

            writer.WritePropertyName(ETagJsonTag);
            writer.WriteValue(twin.ETag);

            writer.WritePropertyName(VersionTag);
            writer.WriteValue(twin.Version);

            if (twin.Status != null)
            {
                writer.WritePropertyName(StatusTag);
                writer.WriteRawValue(JsonConvert.SerializeObject(twin.Status, JsonSerializerSettingsInitializer.GetJsonSerializerSettings()));
            }

            if (!string.IsNullOrWhiteSpace(twin.StatusReason))
            {
                writer.WritePropertyName(StatusReasonTag);
                writer.WriteValue(twin.StatusReason);
            }

            if (twin.StatusUpdatedTime != null)
            {
                writer.WritePropertyName(StatusUpdateTimeTag);
                writer.WriteValue(twin.StatusUpdatedTime);
            }

            if (twin.ConnectionState != null)
            {
                writer.WritePropertyName(ConnectionStateTag);
                writer.WriteRawValue(JsonConvert.SerializeObject(twin.ConnectionState, new StringEnumConverter()));
            }

            if (twin.LastActivityTime != null)
            {
                writer.WritePropertyName(LastActivityTimeTag);
                writer.WriteValue(twin.LastActivityTime);
            }

            if (twin.CloudToDeviceMessageCount != null)
            {
                writer.WritePropertyName(CloudToDeviceMessageCountTag);
                writer.WriteValue(twin.CloudToDeviceMessageCount);
            }

            if (twin.AuthenticationType != null)
            {
                writer.WritePropertyName(AuthenticationTypeTag);
                writer.WriteRawValue(JsonConvert.SerializeObject(twin.AuthenticationType));
            }

            if (twin.X509Thumbprint != null)
            {
                writer.WritePropertyName(X509ThumbprintTag);
                serializer.Serialize(writer, twin.X509Thumbprint);
            }

            if (twin.Configurations != null)
            {
                writer.WritePropertyName(ConfigurationsJsonTag);
                serializer.Serialize(writer, twin.Configurations, typeof(IDictionary<string, ConfigurationInfo>));
            }

            if (twin.Tags != null && twin.Tags.Count > 0)
            {
                writer.WritePropertyName(TagsJsonTag);
                serializer.Serialize(writer, twin.Tags, typeof(IDictionary<string, object>));
            }

            if (twin.Properties?.Desired != null || twin.Properties?.Reported != null)
            {
                writer.WritePropertyName(PropertiesJsonTag);
                writer.WriteStartObject();
                if (twin.Properties.Desired != null)
                {
                    writer.WritePropertyName(DesiredPropertiesJsonTag);
                    serializer.Serialize(writer, twin.Properties.Desired, typeof(TwinCollection));
                }

                if (twin.Properties.Reported != null)
                {
                    writer.WritePropertyName(ReportedPropertiesJsonTag);
                    serializer.Serialize(writer, twin.Properties.Reported, typeof(TwinCollection));
                }

                writer.WriteEndObject();
            }

            if (twin.DeviceScope != null)
            {
                writer.WritePropertyName(DeviceScope);
                serializer.Serialize(writer, twin.DeviceScope, typeof(string));
            }

            if (twin.ParentScopes != null && twin.ParentScopes.Any())
            {
                writer.WritePropertyName(ParentScopes);
                serializer.Serialize(writer, twin.ParentScopes, typeof(IList<string>));
            }

            writer.WriteEndObject();
        }