如何解决C# 反序列化 JSON 并设置 Combobox selectedItem
我试图在这里生成此代码但没有成功。该属性被序列化并存储在一个文件中:
然后加载并反序列化文件:
不幸的是,组合框没有更新,因为有一个空引用,如下面的代码所述
namespace NinjaTrader.Custom.Strategies.Sidisystem
{
[JsonObject(MemberSerialization.OptIn)]
public class SidisystemBase : Strategy
{
private Setup setup;
private ComboBox spCbSetup;
private void AddSidePanelRight()
{
spCbSetup = new ComboBox
{
ItemsSource = Enum.GetValues(typeof(Setup)),};
spCbSetup.SelectionChanged += SpCbSetup_SelectionChanged;
}
private void SpCbSetup_SelectionChanged(object sender,RoutedEventArgs rea)
{
if (spCbSetup == null)
{
return;
}
switch ((Setup)spCbSetup.SelectedItem)
{
case Setup.None:
Setup = Setup.None;
break;
case Setup.OpenRange:
Setup = Setup.OpenRange;
break;
case Setup.SuperTrend:
Setup = Setup.SuperTrend;
break;
case Setup.LineBreak:
Setup = Setup.LineBreak;
break;
case Setup.LevelBounce:
Setup = Setup.LevelBounce;
break;
}
}
private void SpBtnSaveTemplate_Click(object sender,RoutedEventArgs e)
{
using (StreamWriter file = File.CreateText("xxx"))
{
JsonSerializer serializer = new JsonSerializer()
{
Formatting = Formatting.Indented,PreserveReferencesHandling = PreserveReferencesHandling.Objects
};
serializer.Serialize(file,this);
}
}
private void SpBtnLoadTemplate_Click(object sender,RoutedEventArgs e)
{
var jsonSettings = new JsonSerializerSettings { PreserveReferencesHandling = PreserveReferencesHandling.Objects };
var obj = JsonConvert.DeserializeObject<SidisystemBase>(File.ReadAllText("xxx"),jsonSettings);
}
private void SetSelectedSetup()
{
**if (spCbSetup == null)
{
return; // here there is the NULL reference and the code is therefore canceled
}**
switch (Setup)
{
case Setup.None:
spCbSetup.SelectedItem = Setup.None;
break;
case Setup.OpenRange:
spCbSetup.SelectedItem = Setup.OpenRange;
break;
case Setup.SuperTrend:
spCbSetup.SelectedItem = Setup.SuperTrend;
break;
case Setup.LineBreak:
spCbSetup.SelectedItem = Setup.LineBreak;
break;
case Setup.LevelBounce:
spCbSetup.SelectedItem = Setup.LevelBounce;
break;
}
}
[JsonProperty,JsonConverter(typeof(StringEnumConverter))]
public Setup Setup
{
get
{
return setup;
}
set
{
if (value != setup)
{
setup = value;
SetSelectedSetup();
}
}
}
}
}
有人可以告诉我如何在反序列化后通过属性(设置)自动更新组合框? 顺便说一下,我是编程的新手;-)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。