Dot-Net

我可以在不註釋我的類的情況下自定義 Json.NET 序列化嗎?

  • August 9, 2012

我需要使用 Json.NET 將一些實體類序列化為 JSON。為了自定義屬性的名稱,我使用如下[JsonProperty]屬性:

   [JsonProperty("lastName")]
   public string LastName { get; set; }

問題是,我不想在我的實體中包含任何與 JSON 相關的屬性……有沒有辦法以某種方式將註釋外部化,這樣它們就不會弄亂我的實體?

使用XmlSerializer,可以通過XmlAttributeOverrides類輕鬆完成。Json.NET 有類似的東西嗎?

是的,您可以創建自定義契約解析器並自JsonProperty定義定義,而無需使用屬性。範例如下:

class Person { public string First { get; set; } }

class PersonContractResolver : DefaultContractResolver
{
   protected override JsonProperty CreateProperty(
       MemberInfo member, 
       MemberSerialization memberSerialization)
   {
       var property = base.CreateProperty(member, memberSerialization);

       if (member.DeclaringType == typeof(Person) && member.Name == "First")
       {
           property.PropertyName = "FirstName";
       }

       return property;
   }
}

class Program
{
   static void Main(string[] args)
   {
       var result = JsonConvert.SerializeObject(
           new Person { First = "John" },
           new JsonSerializerSettings 
           { 
               ContractResolver = new PersonContractResolver() 
           });

       Console.WriteLine(result);
   }
}

此範常式序的輸出如下:

// {"FirstName":"John"}

引用自:https://stackoverflow.com/questions/11880677