C#對實體進行JSON序列化時枚舉的處理


實體類如下:

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;
    }
}
View Code

通過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"}]

這樣實現后反序列化同樣能夠成功

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM