【发布时间】:2017-11-05 03:50:55
【问题描述】:
使用 Json.Net,我试图将 JsonSerializerSettings 对象作为 Action 的参数之一传递。
SerializerSettings 在程序集 A 中:
public static class SerializerSettings
{
public static readonly JsonSerializerSettings Jss = new JsonSerializerSettings
{
MissingMemberHandling = MissingMemberHandling.Error,
NullValueHandling = NullValueHandling.Ignore,
Converters = new List<JsonConverter>
{ new StringEnumConverter(), new NullStringConverter() }
};
}
(NullStringConverter 只是一个继承自 JsonConverter 的自定义转换器)
为了简洁:
public class NullStringConverter : JsonConverter
{}
我可能没有使用最好或适当的术语来描述这一点,但是,然后从程序集 B 将下面定义的方法作为指向程序集 A 的指针传递,并在程序集 A 中调用它的参数,其中包括定义的 JsonSerializerSettings以上。
private static void Investigated<TRequest, TResponse>(string data, JsonSerializerSettings jss) where TRequest : IBaseRequest where TResponse : IBaseResponse
{
if (string.IsNullOrEmpty(data) || jss == null)
Console.WriteLine("Bad Data");
else
{
var response = JsonConvert.DeserializeObject<TResponse>(data, jss);
}
}
在调试器中,我看到数据字符串很好,jss 设置正确,但反序列化完成时“响应”对象中的所有值都为 null 或默认值。
如果我将相同的 JsonSerializerSettings 本地移动到程序集 B,则反序列化效果很好...
我什至尝试从传入的 JsonSerializerSettings 创建一个新的 JsonSerializerSettings,但它具有相同的 null/默认结果。
我的第一个倾向是怀疑不可能以这种方式将 JsonSerializerSettings 从一个程序集传递/使用到另一个程序集,将静态对象作为操作的参数?
我可能做错了什么。
如果有人觉得我的问题没有很好地形成、缺乏信息或在其他地方得到了回答,我会提前向任何人道歉,我正在努力遵守规则......
【问题讨论】:
-
通常当您收到空响应时,这是因为您尝试将数据映射到的对象不匹配。您是否确认
TResponse实际上已正确映射到您的数据? -
是的先生,从本地定义 JsonSerializer 并获得正确的结果确认我有一个正确映射的 TResponse 对象。
-
我已经为你添加了一个更完整的答案。
标签: c# json.net .net-assembly