Tag: json.net

在序列化对象时,告诉json .net写一个单引号而不是双引号

当调用Newtonsoft.Json.JsonConvert.SerializeObject(myObject)我得到的键和值用双引号括起来,如下所示: {“key” : “value”} 我希望它们用这样的单引号括起来: {‘key’ : ‘value’} 是否可以使用Json .Net?

Json.NET StringEnumConverter无法按预期工作

我正在尝试使用Json.NET和System.Net.Http.HttpClient来发送带有枚举属性的对象,但是枚举总是被序列化为整数值而不是等效的字符串。 我试过按照这里的说明: http://james.newtonking.com/archive/2013/05/08/json-net-5-0-release-5-defaultsettings-and-extension-data 通过将一个StringEnumConverter实例添加到JsonSerializerSettings并尝试使用[JsonProperty(ItemConverterType = typeof(StringEnumConverter))]来装饰枚举属性,这两个似乎都不适用于我的示例。 我正在使用Json.NET版本5.0.8 谁能告诉我,我做错了什么? 以下是要复制的示例控制台应用程序,同时显示全局序列化程序设置和修饰属性: 谢谢。 using System; using System.Net.Http; using Newtonsoft.Json; using Newtonsoft.Json.Converters; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { HttpClient client = new HttpClient { BaseAddress = new Uri(“http://test-uri.com”) }; JsonConvert.DefaultSettings = (() => { var settings = new JsonSerializerSettings(); settings.Converters.Add(new StringEnumConverter()); return settings; }); […]

Json.NET反序列化Mongo ObjectId给出了错误的结果

我正在使用官方的Mongo C#Driver和RestSharp用Json.NET调用Rest Api来执行序列化/反序列化。 假设我有一个Person类,如下所示,我想POST&GET: public class Person { [JsonProperty(“_id”),JsonConverter(typeof(ObjectIdConverter))] public ObjectId Id {get;set;} public string Name {get;set;} } 我创建一个新的Person对象: var person = new Person{Id = ObjectId.GenerateId(),Name=’Joe Bloggs’}; 发布它,在服务器上我看到以下是正确的: { _id: 52498b56904ee108c99fbe88, name: ‘Joe Bloggs’} 问题是,当我执行GET时,我在客户端上获得的ObjectId是{0000000000000 …},即不是{5249 …..}我期望的。 原始响应显示正确的值,但是一旦我反序列化,我就会松开它。 ObjectIdConverter代码是: public class ObjectIdConverter : JsonConverter { public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) { […]

将平面JSON / Dictionary映射到模型(包含子类)

我想将一个扁平的json字符串转换为一个模型,目标类具有子类,而扁平的json具有带前缀的所有子类对象; 比如“{classname}。{property}”。 { “FirstName”: “Joey”, “LastName”: “Billy”, “EmploymentDetails.JobTitle”: “JobTitle”, “EmploymentDetails.StartDate”: “2015-01-01T00:00:00”, “ContactDetails.HouseNumberName”: “10”, “ContactDetails.Road”: “Road” } 这是我的目的地类: public class Person { public string FirstName { get; set; } public string LastName { get; set; } public virtual EmploymentDetails EmploymentDetails { get;set;} public virtual ContactDetails ContactDetails { get;set;} } public class EmploymentDetails { public string JobTitle […]

使用JSON.net序列化Dictionary ?

我正在尝试使用JSON.net来序列化字典。 运用 JsonConvert.SerializeObject(theDict); 这是我的结果 { “1”: { “Blah1”: false, “Blah2”: false, “Blah3”: “None”, “Blah4”: false }, “2”: { “Blah1”: false, “Blah2”: false, “Blah3”: “None”, “Blah4”: false }, “3”: { “Blah1”: false, “Blah2”: false, “Blah3”: “None”, “Blah4”: false }, … … … } 有没有办法序列化这个字典,以便将键呈现为有效的javascript变量? 我也对序列化字典的其他策略持开放态度。

升级NewtonSoft JSON.NET不会隐式序列化受保护的成员

我刚刚将我的NewtonSoft JSON.NET版本从3.0.0更新到3.5.0,我注意到受保护的成员没有被隐式序列化。 我有以下课程: public class SimpleFileContainer : IDto { public virtual string Name { get; protected set; } public virtual string Path { get; protected set; } public SimpleFileContainer(string name, string path) { Name = name; Path = path; } } 以下测试代码未通过 var json = JsonConvert.SerializeObject(new SimpleFileContainer(“Name”, “Path”)); var deserialised = JsonConvert.DeserializeObject(json); Assert.That(deserialised.Name, Is.EqualTo(“Name”); 除非我将属性设置为public或添加更新具有以下属性的类,否则Name和Path属性都为null: […]

如何从C#方法返回Json对象

我正在尝试修复需要Json响应的ASP.NET WebAPI方法。 但是它会返回一个字符串。 最初它是在撤回XML格式,但我已将此行添加到App_Start \ WebApiConfig.cs中的mvc代码中,以便默认返回Json。 config.Formatters.Remove(config.Formatters.XmlFormatter); 我们使用NewtonSoft更新了c#方法如下: public string Get() { string userid = UrlUtil.getParam(this, “userid”, “”); string pwd = UrlUtil.getParam(this, “pwd”, “”); string resp = DynAggrClientAPI.openSession(userid, pwd); JsonSerializer ser = new JsonSerializer(); string jsonresp = JsonConvert.SerializeObject(resp); return resp; } resp var以字符串类型的forms返回: “{status:\”SUCCESS\”,data:[\”4eb97d2c6729df98206cf214874ac1757649839fe4e24c51d21d\”]}” 和jsonresp var看起来像这样: “\”{status:\\\”SUCCESS\\\”,data:[\\\”4eb97d2c6729df98206cf214874ac1757649839fe4e24c51d21d\\\”]}\”” 在Chrome的F12开发工具中,数据对象是: “”{status:\”SUCCESS\”,data:[\”4eb97d2c6729df98206cf214874ac1757649839fe4e24c51d21d\”]}”” 在Console工具中,angular.fromJson(data)的结果: “{status:”SUCCESS”,data:[“4eb97d2c6729df98206cf214874ac1757649839fe4e24c51d21d”]}” 我将不胜感激如何正确返回Json对象,而不是任何字符串类型。 谢谢。 短发 ————更新—————- […]

使用Json.NET自定义反序列化

我上课了 public class Order { public int Id { get; set; } public string ShippingMethod { get; set; } } 我想将下面的JSON数据反序列化为上面的类/对象 string json = @”{ ‘Id’: 1, ‘ShippingMethod’: { ‘Code’: ‘external_DHLExpressWorldwide’, ‘Description’: ‘DHL ILS Express Worldwide’ } }”; 我的想法是JSON中的ShippingMethod是一个对象,但我只想获得ShippingMethod.Code (在JSON中),它将在反序列化期间作为Order类中的string传递给ShippingMethod 。 如何使用Json.NET实现这一目标? 我相信我可以使用CustomJsonConverter来完成它。 但我感到困惑。 文档中的示例仅适用于WriteJson ,但不适ReadJson 。

可以查找Json.net中不存在的Key

我有几个不同的格式,但我无法弄清楚如何处理它们因为当我试图通过密钥json.net崩溃找到。 我希望它只会返回null。 foreach (var item in jsonObj) { var msg = item.Value[“Msg”]; if (msg != null) { txtErrors.Text += msg + Environment.NewLine; } } //格式化一个 {[UserNotFound, { “SeverityType”: 3, “ValidationType”: 2, “Msg”: “Email Not Found” }]} 我的代码有效。 //格式2(因为我没有在服务器端捕获exception) { “Message”: “An error has occurred.”, “ExceptionMessage”: “Object reference not set to an instance of an object.”, […]

为什么Web API不会反序列化,但JSON.Net会?

Web API如何无法反序列化JSON.Net反序列化的对象? 这是Web API控制器: public void Put(EditorSubmissionMainView ajaxSubmission) { // ajaxSubmission: EditorSubmissionMainView with all values (‘data’ also == null) string json = “{\”id\”:\”row_1377\”,\”data\”:{\”ROTATION\”:\”1\”,\”EQUIPMENT\”:[{\”id\”:\”6\”},{\”id\”:\”8\”}],\”NOTES\”:\”\”}}”; EditorSubmissionMainView foo = Newtonsoft.Json.JsonConvert.DeserializeObject(json) as EditorSubmissionMainView; // foo is a EditorSubmissionMainView but properly deserialized. } 这是由Fiddler捕获并格式化的JSON: { “id”: “row_1377”, “data”: { “ROTATION”: “1”, “EQUIPMENT”: [{ “id”: “6” }, { “id”: “8” }], […]