/** Marshall the given parameter object, and output to a SdkJsonGenerator */
  public void marshall(IPSet iPSet, StructuredJsonGenerator jsonGenerator) {

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

    try {
      jsonGenerator.writeStartObject();

      if (iPSet.getIPSetId() != null) {
        jsonGenerator.writeFieldName("IPSetId").writeValue(iPSet.getIPSetId());
      }
      if (iPSet.getName() != null) {
        jsonGenerator.writeFieldName("Name").writeValue(iPSet.getName());
      }

      java.util.List<IPSetDescriptor> iPSetDescriptorsList = iPSet.getIPSetDescriptors();
      if (iPSetDescriptorsList != null) {
        jsonGenerator.writeFieldName("IPSetDescriptors");
        jsonGenerator.writeStartArray();
        for (IPSetDescriptor iPSetDescriptorsListValue : iPSetDescriptorsList) {
          if (iPSetDescriptorsListValue != null) {

            IPSetDescriptorJsonMarshaller.getInstance()
                .marshall(iPSetDescriptorsListValue, jsonGenerator);
          }
        }
        jsonGenerator.writeEndArray();
      }

      jsonGenerator.writeEndObject();
    } catch (Throwable t) {
      throw new SdkClientException("Unable to marshall request to JSON: " + t.getMessage(), t);
    }
  }
  public IPSet unmarshall(JsonUnmarshallerContext context) throws Exception {
    IPSet iPSet = new IPSet();

    int originalDepth = context.getCurrentDepth();
    String currentParentElement = context.getCurrentParentElement();
    int targetDepth = originalDepth + 1;

    JsonToken token = context.getCurrentToken();
    if (token == null) token = context.nextToken();
    if (token == VALUE_NULL) return null;

    while (true) {
      if (token == null) break;

      if (token == FIELD_NAME || token == START_OBJECT) {
        if (context.testExpression("IPSetId", targetDepth)) {
          context.nextToken();
          iPSet.setIPSetId(StringJsonUnmarshaller.getInstance().unmarshall(context));
        }
        if (context.testExpression("Name", targetDepth)) {
          context.nextToken();
          iPSet.setName(StringJsonUnmarshaller.getInstance().unmarshall(context));
        }
        if (context.testExpression("IPSetDescriptors", targetDepth)) {
          context.nextToken();
          iPSet.setIPSetDescriptors(
              new ListUnmarshaller<IPSetDescriptor>(IPSetDescriptorJsonUnmarshaller.getInstance())
                  .unmarshall(context));
        }
      } else if (token == END_ARRAY || token == END_OBJECT) {
        if (context.getLastParsedParentElement() == null
            || context.getLastParsedParentElement().equals(currentParentElement)) {
          if (context.getCurrentDepth() <= originalDepth) break;
        }
      }
      token = context.nextToken();
    }

    return iPSet;
  }