如何使用当前会话将JSON反序列化为XPO对象



我已经在单独的项目中使用默认会话将xpo对象序列化为JSON数据。但当我试图在视图控制器中反序列化相同的内容时,我会得到默认的会话错误。我可以获得当前会话,但我不确定如何使用当前会话进行反序列化。

Newtonsoft正被用于序列化和反序列化。

string filetext= File.ReadAllText("importedfile.json");
Plugin pl = (Plugin)JsonConvert.DeserializeObject(filetext,jsonsettings);

插件是JSON数据应该反序列化到的类名。

假设您的Plugin类型以文档示例中所示的方式继承自DevExpress.Xpo.XPObject

public class Plugin : XPObject {
// XPObject has a built-in Integer key and you can't add a custom key
public Plugin(Session session) : base(session) { }
string fMyProperty;
public string MyProperty {
get { return fMyProperty; }
set { SetPropertyValue(nameof(fMyProperty), ref fMyProperty, value); }
}
}

假设您的反序列化代码已经可以访问某些Session session,那么定义以下CustomCreationConverter<Plugin>:

public class PluginConverter : CustomCreationConverter<Plugin>
{
DevExpress.Xpo.Session Session { get; }
public PluginConverter(DevExpress.Xpo.Session session) => this.Session = session ?? throw new ArgumentNullException();
public override Plugin Create(Type objectType) => new Plugin(Session);
}

并反序列化如下:

Session session; // Your session
var jsonsettings = new JsonSerializerSettings
{
Converters = { new PluginConverter(session), /* Other converters as required */ },
// Other settings as required
};
var pl = JsonConvert.DeserializeObject<Plugin>(filetext, jsonsettings);

当反序列化类型Plugin时,转换器的Create()方法将被调用以使用所提供的会话来制造Plugin

如果使用多个会话,则需要为每个新会话使用一个新的JsonSerializerSettings

此模式可用于从XPObject继承的任何类型,其中公共构造函数接受Session对象。

相关内容

  • 没有找到相关文章

最新更新