public CertificateDescription unmarshall(JsonUnmarshallerContext context) throws Exception {
    CertificateDescription certificateDescription = new CertificateDescription();

    AwsJsonReader reader = context.getReader();
    reader.beginObject();
    while (reader.hasNext()) {
      String name = reader.nextName();

      if (name.equals("certificateArn")) {
        certificateDescription.setCertificateArn(
            StringJsonUnmarshaller.getInstance().unmarshall(context));
      } else if (name.equals("certificateId")) {
        certificateDescription.setCertificateId(
            StringJsonUnmarshaller.getInstance().unmarshall(context));
      } else if (name.equals("status")) {
        certificateDescription.setStatus(StringJsonUnmarshaller.getInstance().unmarshall(context));
      } else if (name.equals("certificatePem")) {
        certificateDescription.setCertificatePem(
            StringJsonUnmarshaller.getInstance().unmarshall(context));
      } else if (name.equals("ownedBy")) {
        certificateDescription.setOwnedBy(StringJsonUnmarshaller.getInstance().unmarshall(context));
      } else if (name.equals("creationDate")) {
        certificateDescription.setCreationDate(
            DateJsonUnmarshaller.getInstance().unmarshall(context));
      } else if (name.equals("lastModifiedDate")) {
        certificateDescription.setLastModifiedDate(
            DateJsonUnmarshaller.getInstance().unmarshall(context));
      } else {
        reader.skipValue();
      }
    }
    reader.endObject();

    return certificateDescription;
  }
  /** Marshall the given parameter object, and output to a SdkJsonGenerator */
  public void marshall(
      CertificateDescription certificateDescription, StructuredJsonGenerator jsonGenerator) {

    if (certificateDescription == null) {
      throw new AmazonClientException("Invalid argument passed to marshall(...)");
    }

    try {
      jsonGenerator.writeStartObject();

      if (certificateDescription.getCertificateArn() != null) {
        jsonGenerator
            .writeFieldName("certificateArn")
            .writeValue(certificateDescription.getCertificateArn());
      }
      if (certificateDescription.getCertificateId() != null) {
        jsonGenerator
            .writeFieldName("certificateId")
            .writeValue(certificateDescription.getCertificateId());
      }
      if (certificateDescription.getCaCertificateId() != null) {
        jsonGenerator
            .writeFieldName("caCertificateId")
            .writeValue(certificateDescription.getCaCertificateId());
      }
      if (certificateDescription.getStatus() != null) {
        jsonGenerator.writeFieldName("status").writeValue(certificateDescription.getStatus());
      }
      if (certificateDescription.getCertificatePem() != null) {
        jsonGenerator
            .writeFieldName("certificatePem")
            .writeValue(certificateDescription.getCertificatePem());
      }
      if (certificateDescription.getOwnedBy() != null) {
        jsonGenerator.writeFieldName("ownedBy").writeValue(certificateDescription.getOwnedBy());
      }
      if (certificateDescription.getPreviousOwnedBy() != null) {
        jsonGenerator
            .writeFieldName("previousOwnedBy")
            .writeValue(certificateDescription.getPreviousOwnedBy());
      }
      if (certificateDescription.getCreationDate() != null) {
        jsonGenerator
            .writeFieldName("creationDate")
            .writeValue(certificateDescription.getCreationDate());
      }
      if (certificateDescription.getLastModifiedDate() != null) {
        jsonGenerator
            .writeFieldName("lastModifiedDate")
            .writeValue(certificateDescription.getLastModifiedDate());
      }
      if (certificateDescription.getTransferData() != null) {
        jsonGenerator.writeFieldName("transferData");
        TransferDataJsonMarshaller.getInstance()
            .marshall(certificateDescription.getTransferData(), jsonGenerator);
      }

      jsonGenerator.writeEndObject();
    } catch (Throwable t) {
      throw new AmazonClientException("Unable to marshall request to JSON: " + t.getMessage(), t);
    }
  }