void StartGameResponse::writeJSON(PFStringJsonWriter& writer)
{
    writer.StartObject();

    if (GameID.length() > 0) {
        writer.String("GameID");
        writer.String(GameID.c_str());
    }
    if (ServerHostname.length() > 0) {
        writer.String("ServerHostname");
        writer.String(ServerHostname.c_str());
    }
    writer.String("ServerPort");
    writer.Uint(ServerPort);

    writer.EndObject();
}
void ItemInstance::writeJSON(PFStringJsonWriter& writer)
{
    writer.StartObject();

    if (ItemId.length() > 0) {
        writer.String("ItemId");
        writer.String(ItemId.c_str());
    }
    if (ItemInstanceId.length() > 0) {
        writer.String("ItemInstanceId");
        writer.String(ItemInstanceId.c_str());
    }
    if (ItemClass.length() > 0) {
        writer.String("ItemClass");
        writer.String(ItemClass.c_str());
    }
    if (PurchaseDate.notNull()) {
        writer.String("PurchaseDate");
        writeDatetime(PurchaseDate, writer);
    }
    if (Expiration.notNull()) {
        writer.String("Expiration");
        writeDatetime(Expiration, writer);
    }
    if (RemainingUses.notNull()) {
        writer.String("RemainingUses");
        writer.Int(RemainingUses);
    }
    if (UsesIncrementedBy.notNull()) {
        writer.String("UsesIncrementedBy");
        writer.Int(UsesIncrementedBy);
    }
    if (Annotation.length() > 0) {
        writer.String("Annotation");
        writer.String(Annotation.c_str());
    }
    if (CatalogVersion.length() > 0) {
        writer.String("CatalogVersion");
        writer.String(CatalogVersion.c_str());
    }
    if (BundleParent.length() > 0) {
        writer.String("BundleParent");
        writer.String(BundleParent.c_str());
    }
    if (DisplayName.length() > 0) {
        writer.String("DisplayName");
        writer.String(DisplayName.c_str());
    }
    if (UnitCurrency.length() > 0) {
        writer.String("UnitCurrency");
        writer.String(UnitCurrency.c_str());
    }
    writer.String("UnitPrice");
    writer.Uint(UnitPrice);
    if (!BundleContents.empty()) {
        writer.String("BundleContents");
        writer.StartArray();
        for (std::list<std::string>::iterator iter = BundleContents.begin(); iter != BundleContents.end(); iter++) {
            writer.String(iter->c_str());
        }
        writer.EndArray();
    }
    if (!CustomData.empty()) {
        writer.String("CustomData");
        writer.StartObject();
        for (std::map<std::string, std::string>::iterator iter = CustomData.begin(); iter != CustomData.end(); ++iter) {
            writer.String(iter->first.c_str());
            writer.String(iter->second.c_str());
        }
        writer.EndObject();
    }

    writer.EndObject();
}