實體類如下:
public enum ESex { Boy, Girl } public class Person { public String Name { get; set; } public String Address { get; set; } public String Age { get; set; } public ESex Sex { get; set; } public Person() { } public Person(String name, String address, String age) { this.Name = name; this.Address = address; this.Age = age; } }
通過Newtonsoft.Json.dll進行序列化如下:
List<Person> list = new List<Person>(); for (int i = 0; i < 2; i++) { Person p = new Person("張三" + i, "重慶" + i, "2" + i); p.Sex = ESex.Girl; list.Add(p); } var result=JsonConvert.SerializeObject(list);
結果為:[{"Name":"張三0","Address":"重慶0","Age":"20","Sex":1},{"Name":"張三1","Address":"重慶1","Age":"21","Sex":1}]
可以看出Sex直接轉換成了1,也就是說枚舉默認從0開始排序,Girl就表示1,但是如果我們想要得到{"Name":"張三1","Address":"重慶1","Age":"21","Sex":"Girl"}結果怎么辦呢?
解決方案:在Sex上面加入JsonConverter說明如下:
public class Person { public String Name { get; set; } public String Address { get; set; } public String Age { get; set; } [JsonConverter(typeof(StringEnumConverter))] public ESex Sex { get; set; } public Person() { } public Person(String name, String address, String age) { this.Name = name; this.Address = address; this.Age = age; } }
這樣修改后得到的結果如下:
[{"Name":"張三0","Address":"重慶0","Age":"20","Sex":"Girl"},{"Name":"張三1","Address":"重慶1","Age":"21","Sex":"Girl"}]
這樣實現后反序列化同樣能夠成功
