反序列化JSON流

时间:2015-01-19 00:31:19

标签: c# json windows-phone-8.1 json-deserialization

这是我的班级

[DataContract]
public class WytypowaneMecze
{
    public WytypowaneMecze() { }
    public WytypowaneMecze(String data, String d_gospodarzy, String d_gosci, String wynik)
    {
        this.Data = data;
        this.D_gospodarzy = d_gospodarzy;
        this.D_gosci = d_gosci;
        this.Wynik = wynik;
    }
    public string Data { get; set; }
    public string D_gospodarzy { get; set; }
    public string D_gosci { get; set; }
    public string Wynik { get; set; }
}

}

我是如何写我的文件列表wytypowane

    private async void zapiszPlik() 
    {
        string json = "wytypowane.json";
        var serializer = new DataContractJsonSerializer(typeof(List<WytypowaneMecze>));

        var stream = await Windows.ApplicationModel.Package.Current.InstalledLocation.OpenStreamForWriteAsync(json, CreationCollisionOption.OpenIfExists);
        using (stream)
        {
            serializer.WriteObject(stream, wytypowane);
        }

    }

但我无法读到这个......

其他信息:&#39; {}] [{},{}] [{}] [{}] [{},{}] [{}] [{}] [{}] [{} ] [{}] [{}] [{}]&#39;不是有效的JSON原语。当JSON数据之后出现无关数据时,也会发生此错误。

    private async void odczyt()
    {
        string json = "wytypowane.json";
        List<WytypowaneMecze> lista = new List<WytypowaneMecze>();
        var deserializer = new DataContractJsonSerializer(typeof(List<WytypowaneMecze>));
        var stream = await Windows.ApplicationModel.Package.Current.InstalledLocation.OpenStreamForReadAsync(json);
        using (stream)
        {
            lista = (List<WytypowaneMecze>)deserializer.ReadObject(stream);
        }
    }

1 个答案:

答案 0 :(得分:1)

您需要使用DataMember属性标记要序列化的属性。这是因为您使用DataContractJsonSerializer和数据合约是opt-in

  

将DataMemberAttribute属性与DataContractAttribute一起应用,以标识属于数据协定的类型的成员。其中一个可以序列化数据合同的序列化程序是DataContractSerializer。

     

数据合同模型是&#34;选择加入&#34;模型。将DataMemberAttribute应用于字段或属性显式指定将序列化成员值。相反,BinaryFormatter序列化一个类型的公共和私有字段,而XmlSerializer仅序列化一个类型的公共字段和属性。

因此:

[DataContract]
public class WytypowaneMecze
{
    public WytypowaneMecze() { }
    public WytypowaneMecze(String data, String d_gospodarzy, String d_gosci, String wynik)
    {
        this.Data = data;
        this.D_gospodarzy = d_gospodarzy;
        this.D_gosci = d_gosci;
        this.Wynik = wynik;
    }
    [DataMember]
    public string Data { get; set; }
    [DataMember]
    public string D_gospodarzy { get; set; }
    [DataMember]
    public string D_gosci { get; set; }
    [DataMember]
    public string Wynik { get; set; }
}