Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/271.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 用json.net序列化匿名类型似乎是失败的_C#_.net_Json.net_Ravendb_Anonymous Types - Fatal编程技术网

C# 用json.net序列化匿名类型似乎是失败的

C# 用json.net序列化匿名类型似乎是失败的,c#,.net,json.net,ravendb,anonymous-types,C#,.net,Json.net,Ravendb,Anonymous Types,意识到问题似乎出现在RavenDb库而不是json.net库中后的最新编辑 到目前为止,我一直使用这段代码来序列化匿名类型: using Raven.Imports.Newtonsoft.Json; var anon = new { errors = new string[] { "Login error" } }; var settings = new JsonSerializerSettings { ContractResolver = new CamelCasePropertyNames

意识到问题似乎出现在RavenDb库而不是json.net库中后的最新编辑

到目前为止,我一直使用这段代码来序列化匿名类型:

using Raven.Imports.Newtonsoft.Json;

var anon = new { errors = new string[] { "Login error" } };
var settings = new JsonSerializerSettings { ContractResolver = new CamelCasePropertyNamesContractResolver() };
var str = JsonConvert.SerializeObject(anon, Formatting.None, settings);
它是在Ravendb2.x中嵌入json.net的

最近我开始了一个新项目。它使用最新的Ravendb3.x

现在,当我序列化匿名类型时,我会在结果字符串中获得其他字段,例如:

{"<errors>i__Field":["Login error"],"errors":["Login error"]}
{“i__字段”:[“登录错误”],“错误”:[“登录错误”]}

谢谢

它是在Ravendb3.x中更改的。 因此有两种解决方案:

  • 改用Json.net库
  • 或自定义设置,如下所示:

    ContractResolver=new CamelCasePropertyNamesContractResolver(){DefaultMembersSearchFlags=System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance}


(请注意,DefaultMembersSearchFlags标记为已过时)

您尝试序列化的匿名类是什么样子的?使用数据示例更新了我的代码示例。您的设置变量名为
settings
。您正在将不同的名称(
Settings
,大写
S
)传递给
SerializeObject
。这是您的实际代码中的一个输入错误,意味着使用了一些其他设置,而不是您指定的设置,还是您的问题中的一个输入错误?如果您的问题有误,那么将您的代码放在一个新的控制台应用程序中,并使用您指定的Json.NET的确切版本,并不能证明您描述的行为,因此,在这种情况下,请输入实际的相关代码来显示问题。对我来说似乎没问题:@NicolasCadilhac,不管它值多少钱,我可以通过摆弄契约解析器设置来获得您描述的输出。在序列化之前,您真的对它进行了新的实例化吗?是实际的Json.NET
Newtonsoft.Json.Serialization.camelcasePropertyNameContractResolver
类,还是一些被错误地赋予与Json.NET相同名称的自定义类?