gpt4 book ai didi

c# - JSON反序列化不调用属性方法

转载 作者:行者123 更新时间:2023-11-30 23:12:07 25 4
gpt4 key购买 nike

我有一个包含三个类的 JSON 类文件,所有类都遵循以下结构:

public class ManifestJSON : INotifyPropertyChanged
{
[JsonProperty("dataType")]
private string dataType;

public string DataType
{
get
{
return dataType;
}
set
{
if(dataType != value)
{
dataType = value;
RaisePropertyChanged("DataType");
}
}
}

[JsonProperty("ttl")]
private int time_to_live;

public int Time_To_Live
{
get
{
return time_to_live;
}
set
{
if (time_to_live != value)
{
time_to_live = value;
RaisePropertyChanged("Time_To_Live");
}
}
}

[JsonProperty("serial")]
private long serial;

public long Serial
{
get
{
return serial;
}
set
{
if (serial != value)
{
serial = value;
RaisePropertyChanged("Serial");
}
}
}

[JsonProperty("modifiedIso8601")]
private string modifiedIso8601;

public string ModifiedIso8601
{
get
{
return modifiedIso8601;
}
set
{
if (modifiedIso8601 != value)
{
modifiedIso8601 = value;
RaisePropertyChanged("ModifiedIso8601");
}
}
}

[JsonProperty("modifiedTimestamp")]
private long modifiedTimestamp;

public long ModifiedTimestamp
{
get
{
return modifiedTimestamp;
}
set
{
if (modifiedTimestamp != value)
{
modifiedTimestamp = value;
RaisePropertyChanged("ModifiedTimestamp");
}
}
}

[JsonProperty("timezone")]
private string timezone;

public string Timezone
{
get
{
return timezone;
}
set
{
if (timezone != value)
{
timezone = value;
RaisePropertyChanged("Timezone");
}
}
}

[JsonProperty("exports")]
private ObservableCollection<ManifestItem> manifest_Items;

public ObservableCollection<ManifestItem> Manifest_Items
{
get
{
return manifest_Items;
}
set
{
if (manifest_Items != value)
{
manifest_Items = value;
RaisePropertyChanged("Manifest_Items");
}
}
}

//Event handling
public event PropertyChangedEventHandler PropertyChanged;

private void RaisePropertyChanged(string property)
{
Console.WriteLine("Updated");
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(property));
}
}

在另一个类中,我创建了一个 ManifestJSON 类型的全局实例

public ManifestJSON manifestData;

通过使用 Newtonsoft.json 库中的 DeserializeObject 方法将 JSON 字符串反序列化为该对象来填充,如下所示:

manifestData = JsonConvert.DeserializeObject<ManifestJSON>(JSONString) .

这成功填充了 ManifestJSON 类,但我的属性方法或事件均未触发。我在这里做错了什么?

最佳答案

如果你想更新现有的数据绑定(bind) ManifestJSON 对象,你不应该用新对象替换这个对象,而是将 JSON 字符串反序列化为新对象,然后设置现有的 manifestData 对象:

var newData = JsonConvert.DeserializeObject<ManifestJSON>(JSONString);
manifestData.DataType = newData.DataType;
manifestData.Time_To_Live = newData.Time_To_Live;
manifestData.Serial = newData.Serial;
//...

关于c# - JSON反序列化不调用属性方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44331673/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com