/* 
 | 
 * Copyright (C) 2008 Google Inc. 
 | 
 * 
 | 
 * 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. 
 | 
 */ 
 | 
  
 | 
package cn.emay.sdk.util.json.gson.annotations; 
 | 
  
 | 
import java.lang.annotation.ElementType; 
 | 
import java.lang.annotation.Retention; 
 | 
import java.lang.annotation.RetentionPolicy; 
 | 
import java.lang.annotation.Target; 
 | 
  
 | 
/** 
 | 
 * An annotation that indicates this member should be serialized to JSON with 
 | 
 * the provided name value as its field name. 
 | 
 * 
 | 
 * <p> 
 | 
 * This annotation will override any {@link com.google.gson.FieldNamingPolicy}, 
 | 
 * including the default field naming policy, that may have been set on the 
 | 
 * {@link com.google.gson.Gson} instance. A different naming policy can set 
 | 
 * using the {@code GsonBuilder} class. See 
 | 
 * {@link com.google.gson.GsonBuilder#setFieldNamingPolicy(com.google.gson.FieldNamingPolicy)} 
 | 
 * for more information. 
 | 
 * </p> 
 | 
 * 
 | 
 * <p> 
 | 
 * Here is an example of how this annotation is meant to be used: 
 | 
 * </p> 
 | 
 *  
 | 
 * <pre> 
 | 
 * public class MyClass { 
 | 
 *   @SerializedName("name") String a; 
 | 
 *   @SerializedName(value="name1", alternate={"name2", "name3"}) String b; 
 | 
 *   String c; 
 | 
 * 
 | 
 *   public MyClass(String a, String b, String c) { 
 | 
 *     this.a = a; 
 | 
 *     this.b = b; 
 | 
 *     this.c = c; 
 | 
 *   } 
 | 
 * } 
 | 
 * </pre> 
 | 
 * 
 | 
 * <p> 
 | 
 * The following shows the output that is generated when serializing an instance 
 | 
 * of the above example class: 
 | 
 * </p> 
 | 
 *  
 | 
 * <pre> 
 | 
 * MyClass target = new MyClass("v1", "v2", "v3"); 
 | 
 * Gson gson = new Gson(); 
 | 
 * String json = gson.toJson(target); 
 | 
 * System.out.println(json); 
 | 
 * 
 | 
 * ===== OUTPUT ===== 
 | 
 * {"name":"v1","name1":"v2","c":"v3"} 
 | 
 * </pre> 
 | 
 * 
 | 
 * <p> 
 | 
 * NOTE: The value you specify in this annotation must be a valid JSON field 
 | 
 * name. 
 | 
 * </p> 
 | 
 * While deserializing, all values specified in the annotation will be 
 | 
 * deserialized into the field. For example: 
 | 
 *  
 | 
 * <pre> 
 | 
 * MyClass target = gson.fromJson("{'name1':'v1'}", MyClass.class); 
 | 
 * assertEquals("v1", target.b); 
 | 
 * target = gson.fromJson("{'name2':'v2'}", MyClass.class); 
 | 
 * assertEquals("v2", target.b); 
 | 
 * target = gson.fromJson("{'name3':'v3'}", MyClass.class); 
 | 
 * assertEquals("v3", target.b); 
 | 
 * </pre> 
 | 
 *  
 | 
 * Note that MyClass.b is now deserialized from either name1, name2 or name3. 
 | 
 * 
 | 
 * @see com.google.gson.FieldNamingPolicy 
 | 
 * 
 | 
 * @author Inderjeet Singh 
 | 
 * @author Joel Leitch 
 | 
 */ 
 | 
@Retention(RetentionPolicy.RUNTIME) 
 | 
@Target({ ElementType.FIELD, ElementType.METHOD }) 
 | 
public @interface SerializedName { 
 | 
  
 | 
    /** 
 | 
     * @return the desired name of the field when it is serialized or deserialized 
 | 
     */ 
 | 
    String value(); 
 | 
  
 | 
    /** 
 | 
     * @return the alternative names of the field when it is deserialized 
 | 
     */ 
 | 
    String[] alternate() default {}; 
 | 
} 
 |