[英]Deserialization of JSON object with List<> using DataContractJsonSerializer in C#
[英]Deserialization of JSON object by using DataContractJsonSerializer in C#
我確定這個問題一再被問到,但由於某種原因,我仍然無法讓這個問題起作用。
我想反序列化包含單個成員的JSON對象; 一個字符串數組:
[{"idTercero":"cod_Tercero"}]
這是我正在嘗試反序列化的類:
[DataContract]
public class rptaOk
{
[DataMember]
public string idTercero { get; set; }
public rptaOk() { }
public rptaOk(string idTercero)
{
this.idTercero = idTercero;
}
}
這是我嘗試反序列化的方法:
public T Deserialise<T>(string json)
{
DataContractJsonSerializer deserializer = new DataContractJsonSerializer(typeof(T));
using (MemoryStream stream = new MemoryStream(Encoding.Unicode.GetBytes(json)))
{
T result = (T)deserializer.ReadObject(stream);
return result;
}
}
所以我嘗試填充對象:
rptaOk deserializedRpta = deserializarOk(rpta);
但由於某種原因,這會返回“”
MessageBox.Show(deserializedRpta.idTercero);
沒有.net框架之外的任何依賴,你可以這樣做
[DataContract(Name="rptaOk")]
public class RptaOk
{
[DataMember(Name="idTercero")]
public string IdTercero { get; set; }
}
[CollectionDataContract(Name="rptaOkList")]
public class RptaOkList : List<RptaOk>{}
var stream = new StreamReader(yourJsonObjectInStreamFormat);
var serializer = new DataContractSerializer(typeof(RptaOkList));
var result = (RptOkList) serializer.ReadObject(stream);
我認為你使這比現在要困難得多。 首先,您的示例json和您嘗試反序列化的類沒有字符串數組。 它們具有string類型的單個屬性。 其次,為什么要使用這個類DataContractJsonSerializer
? 你沒有做任何事情,你不能從簡單的調用json.NET的通用反序列化方法。 我將刪除除類定義之外的所有代碼,並將其替換為這個簡單的單行程序;
rptaOk[] myInstances = JsonConvert.DeserializeObject<rptaOk>(jsonString);
此外,無論你的json的結構是什么,如果你有一個類來正確地建模它,那么該方法將正確地反序列化它。 如果你想強制執行某種合同我建議使用json.NET也支持的json模式。 如果您使用模式,它會強制執行剛性合約,如果您嘗試反序列化為對象,則存在隱式契約。 我不知道會導致它拋出的每個場景,但是如果你的json離類定義太遠,它會。 如果您的類具有未出現在json中的屬性,我相信它們將使用該類型的默認值進行初始化。
編輯:我剛剛注意到你的json實際上是一個對象數組。 因此,您只需要將該賦值的lhs rptaOk
數組或rptaOk
對象,而不是單個。
我不知道你是否願意改變你正在使用的庫,但我使用庫“Newtonsoft.Json”來反序列化JSON對象,它很容易使用
[HttpPost]
public void AddSell(string sellList)
{
var sellList = JsonConvert.DeserializeObject<List<Sell>>(sellListJson);
BD.SaveSellList(sellList);
}
正如您所看到的,您可以將整個json對象列表反序列化為類型為“Sell”的List <>,這是我創建的對象......當然,您也可以對數組執行此操作。 我不知道這個的正確語法,但您可以將此列表轉換為數組
希望這可以幫助
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.