C 基類json反序列化為某個子類,子類屬性不丟失

2021-10-06 20:30:55 字數 1352 閱讀 6734

基類和子類如下:

/// /// 基類

///

public class database

//這裡插入的是子類資料,如data1或data2

public listchildren

}/// /// 子類1

///

class data1 : database

= "1";

public string subdevname

}/// /// 子類2

///

class data2 : database

= "2";

public string markname

}

反序列化規則如下:

public class dataconverter : datacreationconverter

else if (level == "2")

else

}else

//第二種方法:判斷字段是否存在來確認是哪個子類

if (fieldexists("subdevname", jobject, out string subdevname))

else if (fieldexists("markname", jobject, out string markname))

else

}private bool fieldexists(string fieldname, jobject jobject, out string entityname)

}public abstract class datacreationconverter: jsonconverter

public override object readjson(jsonreader reader,

type objecttype,

object existin**alue,

jsonserializer serializer)

public override void writejson(jsonwriter writer,

object value,

jsonserializer serializer)

}

呼叫如下:

//這裡的json中只要包含子類就會按照規則反序列化

//比如基類中有list型別的引數,並且裡面插入的資料是子類資料

//就可以用下列方法反序列化,子類屬性不會丟失

var result=jsonconvert.deserializeobject(jsonstr, new dataconverter());

c 反序列化json並獲得其中某個值

先在nuget裡安裝newtonsoft.json 我們知道通過newtonsoft.json可以將json反串行為實體或datatable,下面這個方法可以直接獲取json中的某乙個值 using newtonsoft.json using newtonsoft.json.linq string ...

多層巢狀json字串序列化和反序列化為實體物件

1.實體 獲取token,響應資料實體 public class token retunn 響應碼 public int code 響應資料 資料型別為data public data data 響應訊息 public string message public class data access ...

C 中JSON序列化和反序列化

最近在寫些呼叫他人介面的程式,用到了大量的json xml序列化和反序列化,今天就來總結下json的序列化和反序列化的實現,有寫得不好的望園中博友多多指教。json序列化和反序列化幫助類 using system using system.collections.generic using syst...