[英]Null Reference On Extracting Data From JSon File
我正在嘗試從 json 文件中提取數據,但是當我單擊一個按鈕時,它給出了 NullReference 的異常,實際上 json 文件中有一個數據,但它仍然給出了一個異常。
//Json File Starts With Name myfile
[
{"Name" : "Stack" , "Surname" : "OverFlow"},
{"Name" : "Google", "Surname" : "INc"}
]
//Json文件結束
[DataContract]
class dt {
public dt(){}
public string Name { get; set; }
public string Surname { get; set; }
}
private async void Button_Click(object sender, RoutedEventArgs e)
{
StorageFile sf = await Windows.ApplicationModel.Package.Current.InstalledLocation.GetFileAsync(@"Assets\myfile.txt");
var dataString = await FileIO.ReadTextAsync(sf);
DataContractJsonSerializer json = new DataContractJsonSerializer(typeof(List<dt>));
MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(dataString));
List<dt> myData = (List<dt>)json.ReadObject(ms);
foreach (var dt in myData)
{
Windows.UI.Popups.MessageDialog md = new Windows.UI.Popups.MessageDialog(dt.Name.ToString() +" "+ dt.Surname.ToString());
await md.ShowAsync();
}
}
您的問題是您使用的是DataContractJsonSerializer
,並且使用顯式數據協定屬性的數據協定序列化是可選的。 這意味着您要序列化的每個成員都必須用[DataMember]
標記。 從文檔:
您還可以使用 DataContractAttribute 和 DataMemberAttribute 特性顯式創建數據協定。 這通常通過將 DataContractAttribute 屬性應用於類型來完成。 此屬性可應用於類、結構和枚舉。 然后必須將 DataMemberAttribute 屬性應用於數據協定類型的每個成員,以指示它是一個數據成員,即它應該被序列化。
因此,您的dt
類必須如下所示:
[DataContract]
class dt {
public dt(){}
[DataMember]
public string Name { get; set; }
[DataMember]
public string Surname { get; set; }
}
您正在獲取空引用,因為dt.Name
和dt.Surname
未序列化,保留為null
。
(順便說一句,由於這兩個成員已經是字符串,因此無需對它們調用ToString()
。)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.