Tag: json

自定义Json.NET合约解析器,用于将小写下划线转换为CamelCase

我正在使用ASP.NET MVC中的REST API,其中生成的序列化JSON使用lowercase_underscore作为属性。 从具有字符串属性FirstName和Surname Person类中,我得到如下JSON: { first_name: “Charlie”, surname: “Brown” } 请注意lowercase_underscore名称。 我用来为我自动执行此转换的合同解析程序是: public class JsonLowerCaseUnderscoreContractResolver : DefaultContractResolver { private Regex regex = new Regex(“(?!(^[AZ]))([AZ])”); protected override string ResolvePropertyName(string propertyName) { return regex.Replace(propertyName, “_$2”).ToLower(); } } 这一切都很好,但我不知道如何用Json.NET实现反向。 因此,例如,我可以如下声明API方法,并且它知道将请求正文中的传入JSON转换为适当的对象: public object Put(int id, [FromBody] Person person)

JSON使用函数参数序列化对象

我有这个C#对象: var obj = new { username = “andrey”, callback = “function(self) { return function() {self.doSomething()} (this) }” } 我需要JSON序列化它以传递给ajax调用中的浏览器。 我使用JavascriptSerializer,但它序列化为以下JSON: {“username”:”andrey”, “callback”: “function(self) { return function() {self.doSomething()} (this) }”} 但我需要的是: {“username”:”andrey”, “callback”: function(self) { return function() {self.doSomething()} (this) }} 函数定义没有引号。 现在,当JSON对象到达浏览器并创建时,’callback’参数不是函数而是字符串。 知道如何修复它,最好是在服务器端吗?

Json.NET – CustomCreationConverter中单个属性的默认反序列化行为

在下面的场景中,当遇到我反序列化的类型中存在的JSON属性时,如何让CrazyItemConverter像往常一样继续? 我有一些看起来像这样的JSON: { “Item”:{ “Name”:”Apple”, “Id”:null, “Size”:5, “Quality”:2 } } JSON被反序列化为一个看起来像这样的类: [JsonConverter(typeof(CrazyItemConverter))] public class Item { [JsonConverter(typeof(CrazyStringConverter))] public string Name { get; set; } public Guid? Id { get; set; } [JsonIgnore] public Dictionary CustomFields { get { if (_customFields == null) _customFields = new Dictionary(); return _customFields; } } … } CrazyItemConverter填充已知属性的值,并将未知属性放在CustomFields中。 其中的ReadJson看起来像这样: public […]

使用Newtonsoft.json.JsonTextWriter编写Json

我正在使用Newtonsoft.json.JsonTextWriter编写一个json。 这是我的代码: StringBuilder sb = new StringBuilder(); StringWriter sw = new StringWriter(sb); JsonWriter jsonWriter = new JsonTextWriter(sw); jsonWriter.Formatting = Formatting.Indented; jsonWriter.WritePropertyName(“Name”); jsonWriter.WriteValue(“Allan”); 我假设sw有json格式{“Name”:“Allan”}。 如何在一些字符串变量中获取书面文本,以便我可以在我的http请求中使用此json数据?

Json.NET – 阻止重新序列化已经序列化的属性

在ASP.NET Web API应用程序中,我正在使用的一些模型包含一大块ad-hoc JSON,仅在客户端有用。 在服务器上,它只是作为字符串进出关系数据库。 性能是关键,根本不需要处理JSON字符串服务器端。 所以在C#中,想象一个像这样的对象: new Person { FirstName = “John”, LastName = “Smith”, Json = “{ \”Age\”: 30 }” }; 默认情况下,Json.NET会像这样序列化这个对象: { “FirstName”: “John”, “LastName”: “Smith”, “Json”: “{ \”Age\”: 30 }” } 我希望能够指示Json.NET假设Json属性已经是序列化表示,因此它不应该重新序列化,并且生成的JSON应该如下所示: { “FirstName”: “John”, “LastName”: “Smith”, “Json”: { “Age”: 30 } } 理想情况下,这适用于两个方向,即在POST JSON表示时,它将自动反序列化为上面的C#表示。 使用Json.NET实现这一目标的最佳机制是什么? 我需要自定义JsonConverter吗? 是否有一个更简单的基于属性的机制? 效率很重要; 重点是跳过序列化开销,这可能是一个微优化,但为了论证,让我们假设它不是。 (可能会返回包含大量Json属性的大列表。)

在尝试解析序列化的JSON字符串时处理MongoDB的ISODate()

我通过官方C#驱动程序使用MongoDB和ASP.NET MVC网站。 我有以下C#模型: public class Contact { public ObjectId Id { get; set; } public string Name { get; set; } public DateTime DateAdded { get; set; } } 从MongoDB中提取并通过MVC序列化为JSON字符串时,如下所示: { “_id” : ObjectId(“52eaad4839b60812fca4bf28”), “Name”: “Joe Blow”, “DateAdded” : ISODate(“2014-01-30T19:51:35.977Z”) } 当我尝试通过JSON.parse()将其从JSON字符串转换为浏览器上的Javascript对象时,我收到以下错误: Uncaught SyntaxError: Unexpected token I 这是因为ISODate(…)不是有效的JSON ObjectId()也不是有效的JSON,但我正在处理的方法是在JSON字符串上执行string.replace()之前在客户端上解析它。 我考虑过为ISODate()做同样的ISODate()但感觉有点过于hacky。 如果不在客户端使用正则表达式,我能做些什么吗? 也许来自MongoDB驱动程序的东西?

JSonNet布尔序列化

快速提问: 在JSONNet中 – 如何将bool true / false序列化为bool 1/0 我可以看到我们如何处理空值,所有这些似乎无法找到如何做到这一点。 这可能吗?

在JSON.NET中序列化派生类时的字段顺序

考虑这两个类: public Class Base { public string Id {get; set;} public string Name {get; set;} public string LastName {get; set;} } 派生类: public Class Derived : Base { public string Address {get; set;} public DateTime DateOfBirth {get; set;} } 使用Json.Net序列化Derived类 时 : Derived record = new Derived record(); {// Initialize here…} JsonConvert.SerializeObject(record); 默认情况下, Derived类的属性首先出现: { […]

如何为Json.NET输出添加注释?

有没有办法可以自动为JSON.Net的序列化输出添加注释? 理想情况下,我认为它类似于以下内容: public class MyClass { [JsonComment(“My documentation string”)] public string MyString { get; set; } } 或者(如果可以避免注释,则更好): public class MyClass { /// /// My documentation string /// public string MyString { get; set; } } 会产生: { //My documentation string “MyString”: “Test” } 我问的原因是我们使用Json.NET来序列化配置文件,以后可以手动更改。 我想在我的C#配置类中包含文档,并在JSON中重现这些文档,以帮助以后可能需要更改文件的人。 更新 :正如RoToRa在下面指出的那样,在JSON规范中技术上不允许发表评论(请参阅http://www.json.org上的方便语法图)。 但是, Json.NET站点上的function表包括: 支持阅读和撰写评论 和Newtonsoft.Json.JsonTextWriter.WriteComment(string)存在,它输出一个注释。 我对创建注释的简洁方法感兴趣,而不是直接使用JsonTextWriter 。

在Web API控制器中构建JSON响应

在WebAPI项目中,我有一个控制器,它根据用户输入的值检查产品的状态。 让我们说他们输入“123”并且响应应该是“状态”:1,和产品列表。 如果输入“321”,则“状态”为0,产品列表。 我的问题是,如何在WebAPI控制器中构建正确的字符串。 [Route(“{value:int}”)] public string GetProducts(int value) { var json = “”; var products = db.Products; if (products.Any()) { foreach (var s in products) { ProductApi product = new ProductApi(); product.Name = s.Name; json += JsonConvert.SerializeObject(supplier); } } var status = db.Status; if (status.Any()) { json += “{status:1}”; } else { json += […]