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();
}