gpt4 book ai didi

c# - ServiceStack JsonSerializer 继承时不序列化对象成员

转载 作者:行者123 更新时间:2023-12-02 21:58:24 26 4
gpt4 key购买 nike

我正在尝试使用 ServiceStack.Redis,我注意到当我存储一个包含从另一个对象继承的对象的成员的对象并稍后尝试获取它时,我得到了 null。

我检查并发现 ServiceStack.Redis 正在使用 ServiceStack.JsonSerializer,因此我尝试创建一个测试用例:

class Program
{
public class ClassA
{
public string Id;

public Dictionary<string, ClassB> dic = new Dictionary<string, ClassB>();
}

public class ClassB
{
public string Id;
}

public class ClassC : ClassB
{
public object C;
}

public class ClassD
{
public string Id;
}

static void Main(string[] args)
{
ClassA t = new ClassA();
t.Id = Guid.NewGuid().ToString("n");
t.dic.Add("AAA", new ClassC());
t.dic["AAA"].Id = Guid.NewGuid().ToString("n");
((ClassC)t.dic["AAA"]).C = new ClassD();
((ClassD)((ClassC)t.dic["AAA"]).C).Id = Guid.NewGuid().ToString("n");

ServiceStack.Text.JsConfig.IncludeNullValues = true;
ServiceStack.Text.JsConfig.IncludePublicFields = true;
ServiceStack.Text.JsConfig.IncludeTypeInfo = true;
ServiceStack.Text.JsConfig.MaxDepth = int.MaxValue;

Console.WriteLine("before SerializeToString data is:");
if (string.IsNullOrEmpty(((ClassD)((ClassC)t.dic["AAA"]).C).Id))
{
Console.WriteLine("wrong");
}
else
{
Console.WriteLine("right");
}

string a = JsonSerializer.SerializeToString<ClassA>(t);

ClassA t2 = JsonSerializer.DeserializeFromString<ClassA>(a);

Console.WriteLine("after SerializeToString data is:");
if (((ClassC)t2.dic["AAA"]).C == null ||
string.IsNullOrEmpty(((ClassD)((ClassC)t2.dic["AAA"]).C).Id))
{
Console.WriteLine("wrong");
}
else
{
Console.WriteLine("right");
}

Console.ReadLine();
}
}

当它不起作用时,我可以找到一个更简单的情况......

正如您所看到的,ClassC 有一个 object 类型的成员,并且该类从 ClassB 继承(如果您删除继承或为该成员提供其他类型,它将起作用) )。

序列化之前,数据是“正确的”,反序列化之后,数据是“错误的” -> 成员为空。

你能帮我吗?

最佳答案

默认情况下,ServiceStack 仅序列化公共(public)属性。要序列化公共(public)字段,您需要设置:

JsConfig.IncludePublicFields = true;

此外,如果您想使用继承,您需要使子类抽象或接口(interface)。 See this answer for more info .

关于c# - ServiceStack JsonSerializer 继承时不序列化对象成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17359558/

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