Tag: json.net

串行化Mongo ObjectId时出现JSON.NET错误

我正在玩MongoDB并且有一个带有mongodb ObjectId的对象。 当我使用.NET Json()方法将其序列化时,一切都很好(但日期太可怕了!) 如果我尝试使用JSON.NET序列化程序,它在尝试序列化ObjectID时会给我一个InvalidCastException 任何想法发生了什么以及如何解决这个问题? using MongoDB.Driver; using MongoDB.Bson; using Newtonsoft.Json; //this is a route on a controller public string NiceJsonPlease() { var q = new TestClass(); q.id = new ObjectId(); q.test = “just updating this”; return JsonConvert.SerializeObject(q); } //simple test class class TestClass { public ObjectId id; //MongoDB ObjectID public string test = […]

如何在同一对象中使用重复的属性名称反序列化JSON

我有一个JSON字符串,我希望包含重复键,我无法让JSON.NET满意。 我想知道是否有人知道最好的方法(也许使用JsonConverter ?)让JArrays在看到重复的键名时将JObject的子JObjects转换为JArrays ? // For example: This gives me a JObject with a single “JProperty\JObject” child. var obj = JsonConvert.DeserializeObject(“{ \”HiThere\”:1}”); // This throws: // System.ArgumentException : Can not add Newtonsoft.Json.Linq.JValue to Newtonsoft.Json.Linq.JObject. obj = JsonConvert.DeserializeObject(“{ \”HiThere\”:1, \”HiThere\”:2, \”HiThere\”:3 }”); 我试图反序列化的实际JSON要复杂得多,并且重复项嵌套在多个级别。 但上面的代码说明了为什么它失败了。 我知道JSON不正确,这就是为什么我要问JSON.NET是否有办法解决这个问题。 为了论证,让我说我无法控制JSON。 我实际上对父对象使用特定类型,但遇到问题的特定属性将是字符串或另一个嵌套的JSON对象。 由于这个原因,失败的属性类型是“对象”。

我怎样才能合并两个JObject?

我有一个第一个json: { “data”: [{ “id”: “id1”, “field”: “field1” }], “paging”: { “prev”: “link1”, } } 第二个: { “data”: [{ “id”: “id2”, “field”: “field2” }], “paging”: { “prev”: “link2”, } } 我想合并/联合两个数据数组,例如: { “data”: [{ “id”: “id1”, “field”: “field1” }, { “id”: “id2”, “field”: “field2” }] } (我现在不关心paging )。 我怎样才能快速轻松地完成? 这是我的尝试: var final = JsonConvert.SerializeObject(new { […]

Json.Net:将属性序列化/反序列化为值,而不是对象

在另一个类中使用时,如何实现Id类的以下JSON表示? class Car { public StringId Id { get; set; } public string Name { get; set; } } class StringId { public string Value { get; set; } } // ——————————————— // Desired representation { “Id”: “someId”, “Name”: “Ford” } // Default (undesired) representation { “Id” : { “Value”: “someId” }, “Name”: “Ford” }

尽管将PreserveReferencesHandling设置为“None”,Json.Net仍向EF对象添加$ id

我已经看过如何在JSON序列化期间删除$ id但是给出的答案似乎对我没有用,我希望有人能弄清楚我做错了什么。 这是我的代码: return JsonConvert.SerializeObject(target, new JsonSerializerSettings { NullValueHandling = NullValueHandling.Include, PreserveReferencesHandling = PreserveReferencesHandling.None, ContractResolver = new CustomContractResolver(), Converters = CustomConverters }); 这个输出仍然以$ id出现,但仅限于entity framework对象,这是设计的吗? 如果是这样,有没有办法阻止Entity Framework对象上的那些$ id?

如何使用Json.NET反序列化可以是两种不同数据类型的JSON属性

我正在使用Json.NET进行我正在进行的项目。 从外部API,我接收的JSON具有作为对象的属性,但是当它们为空时,传递“false”。 例如: data: { supplier: { id: 15, name: ‘TheOne’ } } 也可能是: data: { supplier: false } 我应该如何定义供应商属性,以便将供应商反序列化为Supplier对象或为null。 现在我有: public class Data { [JsonProperty(“supplier”)] public SupplierData Supplier { get; set; } } public class SupplierData { [JsonProperty(“id”)] public int Id { get; set; } [JsonProperty(“name”)] public string Name { get; set; } } […]

如何在JSON对象中转换转义的JSON字符串?

我从公共API接收一个JSON对象,其属性本身是一个转义的JSON字符串。 { “responses”:[ { “info”:”keep \”this\” in a string”, “body”:”{\”error\”:{\”message\”:\”Invalid command\”,\”type\”:\”Exception\”,\”code\”:123}}” }, { “info”:”more \”data\” to keep in a string”, “body”:”{\”error\”:{\”message\”:\”Other error\”,\”type\”:\”Exception\”,\”code\”:321}}” } ] } 我如何将此属性转换为实际的JSON对象(未转义),以便使用NewtonSoft Json.NET反序列化整个响应?

如何在生成的JSON中省略/忽略/跳过空对象文字?

我正在使用Json.NET将复杂的C#对象图转换为JSON。 由于忽略了对象中具有默认值的属性,我通常在输出中得到空对象文字,我想省略它。 例如: public class Sample { public int Value { get; set; } public string Name { get; set; } } public class ParentSample { // this property should never be null, hence the initializer public Sample Sample { get; } = new Sample(); } .. var obj = new ParentSample(); // settings for […]

将嵌套的JSON反序列化为C#对象

我从一个看起来像这样的API获取JSON: { “Items”: { “Item322A”: [{ “prop1”: “string”, “prop2”: “string”, “prop3”: 1, “prop4”: false },{ “prop1”: “string”, “prop2”: “string”, “prop3”: 0, “prop4”: false }], “Item2B”: [{ “prop1”: “string”, “prop2”: “string”, “prop3”: 14, “prop4”: true }] }, “Errors”: [“String”] } 我已经尝试了一些方法来在c#对象中表示这个JSON(这里列出的太多了)。 我已尝试使用列表和词典,这是我最近尝试如何表示它的示例: private class Response { public Item Items { get; set; } public string[] Errors […]

json.net:为字典键指定转换器

我有一个JSON: { “data”: { “A”: 5, “B”: 6 }, “foo”: “foo”, “bar”: “bar” } 我需要将数据反序列化为一个类: public Dictionary Data { get; set; } public string Foo { get; set; } public string Bar { get; set; } 但MyEnum值分别是CodeA和CodeB而不是简单的A和B 我有一个可以处理转换的自定义转换器。 但是如何指定JsonConverter与Dictionary键一起使用?