context: /* 
   * Dowding HTTP REST API
   *
   * The Dowding HTTP REST API allows you to add and retrieve contact data from Dowding as well as perform other peripheral functions.
   *
   * OpenAPI spec version: 1.0.0
   * 
   * Generated by: https://github.com/swagger-api/swagger-codegen.git
   *
   * Licensed under the Apache License, Version 2.0 (the "License");
   * you may not use this file except in compliance with the License.
   * You may obtain a copy of the License at
   *
   *      http://www.apache.org/licenses/LICENSE-2.0
   *
   * Unless required by applicable law or agreed to in writing, software
   * distributed under the License is distributed on an "AS IS" BASIS,
   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   * See the License for the specific language governing permissions and
   * limitations under the License.
   */
  
  using System;
  using System.Linq;
  using System.IO;
  using System.Text;
  using System.Collections;
  using System.Collections.Generic;
  using System.Collections.ObjectModel;
  using System.Runtime.Serialization;
  using Newtonsoft.Json;
  using Newtonsoft.Json.Converters;
  
  namespace Dowding.Model
  {
      /// <summary>
      /// AgentUpdateDto
      /// </summary>
      [DataContract]
      public partial class AgentUpdateDto :  IEquatable<AgentUpdateDto>
      {
          /// <summary>
          /// Initializes a new instance of the <see cref="AgentUpdateDto" /> class.
          /// </summary>
          [JsonConstructorAttribute]
          protected AgentUpdateDto() { }
          /// <summary>
          /// Initializes a new instance of the <see cref="AgentUpdateDto" /> class.
          /// </summary>
          /// <param name="Name">String representing the plain-english name of the agent (required).</param>
          /// <param name="Vendor">String of the manufacturer/developer of the agent (i.e. DeDrone) (required).</param>
          /// <param name="Model">String of the specific model of the agent (i.e. RF-300) (required).</param>
          /// <param name="Mode">Arbitrary string representing device&#39;s operating mode for use by the vendor.</param>
          /// <param name="Type">String representing an agent type (i.e. Acoustic, Radar, Camera, etc.).</param>
          /// <param name="HwVersion">String representing agent hardware version.</param>
          /// <param name="SwVersion">String representing agent software version.</param>
          public AgentUpdateDto(string Name = null, string Vendor = null, string Model = null, string Mode = null, string Type = null, string HwVersion = null, string SwVersion = null)
          {
              // to ensure "Name" is required (not null)
              if (Name == null)
              {
                  throw new InvalidDataException("Name is a required property for AgentUpdateDto and cannot be null");
              }
              else
              {
                  this.Name = Name;
              }
              // to ensure "Vendor" is required (not null)
              if (Vendor == null)
              {
                  throw new InvalidDataException("Vendor is a required property for AgentUpdateDto and cannot be null");
              }
              else
              {
                  this.Vendor = Vendor;
              }
              // to ensure "Model" is required (not null)
              if (Model == null)
              {
                  throw new InvalidDataException("Model is a required property for AgentUpdateDto and cannot be null");
              }
              else
              {
                  this.Model = Model;
              }
              this.Mode = Mode;
              this.Type = Type;
              this.HwVersion = HwVersion;
              this.SwVersion = SwVersion;
          }
          
          /// <summary>
          /// String representing the plain-english name of the agent
          /// </summary>
          /// <value>String representing the plain-english name of the agent</value>
          [DataMember(Name="name", EmitDefaultValue=false)]
          public string Name { get; set; }
          /// <summary>
          /// String of the manufacturer/developer of the agent (i.e. DeDrone)
          /// </summary>
          /// <value>String of the manufacturer/developer of the agent (i.e. DeDrone)</value>
          [DataMember(Name="vendor", EmitDefaultValue=false)]
          public string Vendor { get; set; }
          /// <summary>
          /// String of the specific model of the agent (i.e. RF-300)
          /// </summary>
          /// <value>String of the specific model of the agent (i.e. RF-300)</value>
          [DataMember(Name="model", EmitDefaultValue=false)]
          public string Model { get; set; }
          /// <summary>
          /// Arbitrary string representing device&#39;s operating mode for use by the vendor
          /// </summary>
          /// <value>Arbitrary string representing device&#39;s operating mode for use by the vendor</value>
          [DataMember(Name="mode", EmitDefaultValue=false)]
          public string Mode { get; set; }
          /// <summary>
          /// String representing an agent type (i.e. Acoustic, Radar, Camera, etc.)
          /// </summary>
          /// <value>String representing an agent type (i.e. Acoustic, Radar, Camera, etc.)</value>
          [DataMember(Name="type", EmitDefaultValue=false)]
          public string Type { get; set; }
          /// <summary>
          /// String representing agent hardware version
          /// </summary>
          /// <value>String representing agent hardware version</value>
          [DataMember(Name="hw_version", EmitDefaultValue=false)]
          public string HwVersion { get; set; }
          /// <summary>
          /// String representing agent software version
          /// </summary>
          /// <value>String representing agent software version</value>
          [DataMember(Name="sw_version", EmitDefaultValue=false)]
          public string SwVersion { get; set; }
          /// <summary>
          /// Returns the string presentation of the object
          /// </summary>
          /// <returns>String presentation of the object</returns>
          public override string ToString()
          {
              var sb = new StringBuilder();
              sb.Append("class AgentUpdateDto {\n");
              sb.Append("  Name: ").Append(Name).Append("\n");
              sb.Append("  Vendor: ").Append(Vendor).Append("\n");
              sb.Append("  Model: ").Append(Model).Append("\n");
              sb.Append("  Mode: ").Append(Mode).Append("\n");
              sb.Append("  Type: ").Append(Type).Append("\n");
              sb.Append("  HwVersion: ").Append(HwVersion).Append("\n");
              sb.Append("  SwVersion: ").Append(SwVersion).Append("\n");
              sb.Append("}\n");
              return sb.ToString();
          }
    
          /// <summary>
          /// Returns the JSON string presentation of the object
          /// </summary>
          /// <returns>JSON string presentation of the object</returns>
          public string ToJson()
          {
              return JsonConvert.SerializeObject(this, Formatting.Indented);
          }
  
          /// <summary>
          /// Returns true if objects are equal
          /// </summary>
          /// <param name="obj">Object to be compared</param>
          /// <returns>Boolean</returns>
          public override bool Equals(object obj)
          {
              // credit: http://stackoverflow.com/a/10454552/677735
              return this.Equals(obj as AgentUpdateDto);
          }
  
          /// <summary>
          /// Returns true if AgentUpdateDto instances are equal
          /// </summary>
          /// <param name="other">Instance of AgentUpdateDto to be compared</param>
          /// <returns>Boolean</returns>
          public bool Equals(AgentUpdateDto other)
          {
              // credit: http://stackoverflow.com/a/10454552/677735
              if (other == null)
                  return false;
  
              return 
                  (
                      this.Name == other.Name ||
                      this.Name != null &&
                      this.Name.Equals(other.Name)
                  ) && 
                  (
                      this.Vendor == other.Vendor ||
                      this.Vendor != null &&
                      this.Vendor.Equals(other.Vendor)
                  ) && 
                  (
                      this.Model == other.Model ||
                      this.Model != null &&
                      this.Model.Equals(other.Model)
                  ) && 
                  (
                      this.Mode == other.Mode ||
  
gt:                     this.Mode != null &&