Tag: json.net

将ArrayPool对象提供给JsonOutputFormatter构造函数

从.net RC2升级到RTM后,我发现需要为从ArrayPool派生的JsonOutputFormatter的构造函数提供参数。 我如何获得此对象? 我正在手动创建JsonOutputFormatter,因为我需要配置ReferenceLoopHandling。 我能找到的其他相关信息是这样的: https : //github.com/aspnet/Mvc/issues/4562 public IServiceProvider ConfigureServices(IServiceCollection services) { // Add framework services. services.AddMemoryCache(); services.AddSession(); services.AddMvc(); var formatterSettings = JsonSerializerSettingsProvider.CreateSerializerSettings(); formatterSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore; JsonOutputFormatter formatter = new JsonOutputFormatter(formatterSettings, ???); services.Configure(options => { options.OutputFormatters.RemoveType(); options.OutputFormatters.Insert(0, formatter); }); //etc… }

json.net需要在json中找不到的属性

我正在使用Json.net,我得到了一个类如下 public class RecordAlias { [JsonProperty(PropertyName = “eId”, Required = Required.Always)] public string EntityId { get; set; } [JsonProperty(PropertyName = “aId”, Required = Required.AllowNull)] public string AliasId { get; set; } [JsonProperty(PropertyName = “iSd”, Required = Required.AllowNull)] public bool IsSelected { get; set; } } 因此,即使通过某些项目在json字符串中没有属性“iSd”,也可以对json进行反序列化,我希望如果不存在,则应该填充该类型的默认值,例如,IsSelected应该为false,除了最后一项 [{ “eId” : “30022004”, “aId” : “1” }, { […]

从类中获取要在查询字符串中使用的JSON属性名称列表

如果我有一个CSON模型类,JSON.net使用它来绑定序列化JSON字符串中的数据,有没有办法可以从该类创建一个查询字符串以便发出初始请求? 模型类示例: public class model { [JsonProperty(PropertyName = “id”)] public long ID { get; set; } [JsonProperty(PropertyName = “some_string”)] public string SomeString {get; set;} } 查询字符串示例: baseUrl + uri + “&fields=id,some_string” + token 所以我想要做的就是从模型对象中收集“id”和“some_string”,这样我就可以动态地创建一个“&fields”参数。 谢谢!

使用JSON.Net编写属性名称

我正在使用JSON.net在C#中编写一些json。 我可以像这样生成JSON { “id”: “234”, “name”: “abc” } 我想做的就是得到这个 { “DATA”: { “id”: “234”, “name”: “abc” } } 这是我正在使用的json.net代码 StringBuilder sb = new StringBuilder(); StringWriter sw = new StringWriter(sb); JsonWriter jsonWriter = new JsonTextWriter(sw); jsonWriter.Formatting = Formatting.Indented; jsonWriter.WriteStartObject(); jsonWriter.WritePropertyName(“id”); jsonWriter.WriteValue(“234”); jsonWriter.WritePropertyName(“name”); jsonWriter.WriteValue(“abc”); jsonWriter.WriteEndObject(); 你能建议如何添加’DATA’部分吗?

使用动态属性名称将数据序列化为json字符串

我有一个接受键和值的方法。 两个变量都可以具有动态内容。 key =>是一个动态字符串,可以是所有的东西,例如“LastSentDate” value =>是一个可以像“2014-10-10”这样的东西的对象 因为键是一个动态值,如“LastSentDate”或任何键传递给方法,然后我希望json属性是键字符串的值,而不是字面上键自己… public void SetRowVariable(string key, object value) { var obj = new { key = value }; // key property is literally taken maybe anonym object is not a good idea? string jsonString = JsonConvert.SerializeObject(obj); // jsonString should have that output => “{ “LastSentDate”: “2014-10-10″ }” } 我如何序列化我得到希望输出的obj? “key”属性也必须包含特殊的字符,如“!”§$%&/()=?“` […]

JSON.NET对具有Stream类型成员的对象进行序列化?

希望这是一个我忽略的简单修复。 我有一个对象传递到一个事件处理程序,我想使用JSON.NET序列化该对象,如下所示: public void OnEvent(IEventObject foo) { // Serialize foo to string/disk here? var data = JsonConvert.SerializeObject(foo, Formatting.Indented); } 似乎foo的一个或多个成员是流。 我已经认识到Streams不可序列化,因为它们是数据的抽象而不是数据本身。 这是有道理的。 我不知道如何序列化这个对象: a)将流转换为数据并将其序列化 b)忽略流并序列化其余成员 对此的一个重要警告是我无法访问IEventObject或其实现,因此我无法使用属性标记标记任何这些对象。 我提出的唯一解决方案是将此对象包装在我自己的类中,对其进行适当标记,然后对其进行序列化。 稍后我会反序列化回我自己的类,并将其转换为原始对象。 我不喜欢这种方法,因为它涉及额外的对象和转换步骤,并且如果可能的话希望避免它。

尝试反序列化从Exceptioninheritance的类时,Json.net失败

我有一个inheritance自Exception的类SearchError ,当我尝试从有效的json反序列化时,我得到以下exception: ISerializable type ‘SearchError’ does not have a valid constructor. To correctly implement ISerializable a constructor that takes SerializationInfo and StreamingContext parameters should be present. Path ”, line 1, position 81. 我尝试实现建议的缺少构造函数,但没有帮助。 这是实现建议的构造函数后的类: public class APIError : Exception { [JsonProperty(“error”)] public string Error { get; set; } [JsonProperty(“@http_status_code”)] public int HttpStatusCode { get; set; […]

Newtonsoft.Json自定义序列化日期

我正在使用Newtonsoft.Json将我的日期从C#序列化为javscript我想要做的是让json序列化程序使用当前文化将日期格式化为字符串 这是我的Json序列化器得到的: JsonConvert.SerializeObject(DateTime.Now); 结果是: “2016-07-08T17:10:17.6722753-05:00” 但我更喜欢的是: “08/07/2016 17:10:57” 因为我目前的文化是巴西,我希望我的日期以上述方式显示。 是否可以全局 (对于任何可能被序列化的日期)告诉Newtonsoft.Json中的json序列化程序使用它就像使用date.ToString() (因为ToString尊重System.Threading.Thread.CurrentThread.CurrentCulture.DateTimeFormat的文化System.Threading.Thread.CurrentThread.CurrentCulture.DateTimeFormat并相应地给出正确的格式)

反序列化使得字段是空列表而不是空

如果我有这样的课程: [DataContract(Name = “”, Namespace = “”)] public class MyDataObject { [DataMember(Name = “NeverNull”)] public IList MyInts { get; set; } } 当下列字符串被反序列化时,有没有办法让MyInts字段成为非空的空列表? string serialized = @”{“”NeverNull””:null}”; MyDataObject myDataObject = JsonConvert.DeserializeObject(serialized); 我正在使用Newtonsoft.Json 我问的原因是我有一个相当复杂的json请求解析,它包含对象列表的嵌套,我想要反序列化代码来创建这些对象,所以我可以避免大量的空检查: if (foo.bar != null) { foreach (var bar in foo.bar) { if (bar.baz != null) { foreach (var baz in bar.baz) { […]

使用json模式指定值可以是字符串或null

希望这对其他人来说并不明显,因为我发现http://json-schema.org/上的文档缺乏更精细的细节。 我正在获取一个json块,其中包含一些可以为null或字符串的属性。 如何在json模式(由json.NET的JsonSchema.Parse方法解析)中指定值可以是null类型还是类型字符串? 有什么简单的我缺少像为类型提供数组? 例如; “member_region”: { “type”: [ “string”, null ] } // this throws an exception 另外,有没有人比json-schema.org有更好的json架构细节来源? 我在哪里可以找到更多的例子? 我不想阅读大的doc / spec来找到一些可以在10行示例中轻松演示的内容。