簡體   English   中英

從 JSon 文件中提取數據的空引用

[英]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.Namedt.Surname未序列化,保留為null

(順便說一句,由於這兩個成員已經是字符串,因此無需對它們調用ToString() 。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM