Serialization 如何在JsonFX中反序列化多态集合?

Serialization 如何在JsonFX中反序列化多态集合?,serialization,polymorphism,jsonfx,Serialization,Polymorphism,Jsonfx,我的JsonFX序列化代码可以工作,但是我正在序列化的对象包含一个多态实体列表,它们都被反序列化为它们的基类型,而不是它们的实际类型 这是我的序列化代码: public static string Serialize(System.Object obj) { StringBuilder builder = new StringBuilder(); using (TextWriter textWriter = new StringWriter(builder)) {

我的JsonFX序列化代码可以工作,但是我正在序列化的对象包含一个多态实体列表,它们都被反序列化为它们的基类型,而不是它们的实际类型

这是我的序列化代码:

public static string Serialize(System.Object obj)
{
    StringBuilder builder = new StringBuilder();
    using (TextWriter textWriter = new StringWriter(builder))
    {
        JsonWriter writer = new JsonWriter(textWriter);
        writer.Write(obj);

        return builder.ToString();
    }
}

public static T Deserialize<T>(string json)
{
    using (TextReader textReader = new StringReader(json))
    {
        var jsonReader = new JsonReader(textReader);
        return jsonReader.Deserialize<T>();
    }
}
公共静态字符串序列化(System.Object obj)
{
StringBuilder=新的StringBuilder();
使用(TextWriter TextWriter=新的StringWriter(生成器))
{
JsonWriter=新的JsonWriter(textWriter);
writer.Write(obj);
返回builder.ToString();
}
}
公共静态T反序列化(字符串json)
{
使用(TextReader TextReader=newStringReader(json))
{
var jsonReader=新的jsonReader(textReader);
返回jsonReader.Deserialize();
}
}
正如你所看到的,这很简单。我也没有用任何属性或任何特殊的东西来装饰我的类,使它们可以序列化。除了多态性问题,这一切似乎都正常工作

那么,我怎样才能让我的多态类型正确地反序列化呢


谢谢。

您需要打开类型提示。下面是示例代码(这与JSONFXV1.4相关,可能与您的版本一起使用,也可能与您的版本不一起使用):

这将向JSON字符串中添加额外数据,如下所示:

"__type": "MyNamespace.MyClass, MyAssembly",
这意味着它会根据类名找出它的派生类型。如果更改类名或名称空间名,它将不再起作用。更糟糕的是,您不能再从旧的JSON文本数据反序列化,除非您批量替换所有出现的旧类名并用新类名替换它

所以你得小心点

编辑:忘了提到你必须编辑JsonFx的源代码才能工作。 在JsonReader.cs中,找到ReadArray方法:

更改:

object value = this.Read(arrayItemType, isArrayTypeAHint);
致:


这将确保JsonFx始终尝试找出数组/列表中每个元素的类型。如果您希望此操作仅适用于单个变量,那么您需要对相应的代码进行更改(尚未尝试过)。

您需要打开类型提示。下面是示例代码(这与JSONFXV1.4相关,可能与您的版本一起使用,也可能与您的版本不一起使用):

这将向JSON字符串中添加额外数据,如下所示:

"__type": "MyNamespace.MyClass, MyAssembly",
这意味着它会根据类名找出它的派生类型。如果更改类名或名称空间名,它将不再起作用。更糟糕的是,您不能再从旧的JSON文本数据反序列化,除非您批量替换所有出现的旧类名并用新类名替换它

所以你得小心点

编辑:忘了提到你必须编辑JsonFx的源代码才能工作。 在JsonReader.cs中,找到ReadArray方法:

更改:

object value = this.Read(arrayItemType, isArrayTypeAHint);
致:


这将确保JsonFx始终尝试找出数组/列表中每个元素的类型。如果您想让它只适用于单个变量,那么您需要对相应的代码进行更改(没有尝试过)。

我只是想知道JSONFX是什么?我只是想知道JSONFX是什么?