Tag: json.net

在Json.net中使用自定义JsonConverter和TypeNameHandling

我有一个类接口类型的类,如: public class Foo { public IBar Bar { get; set; } } 我还有IBar接口的多个具体实现,可以在运行时设置。 其中一些具体类需要自定义JsonConverter进行序列化和反序列化。 利用TypeNameHandling.Auto选项,可以完美地序列化和反序列化需要IBar类的非转换器。 另一方面,自定义序列化类没有$type name输出,虽然它们按预期序列化,但它们不能反序列化为它们的具体类型。 我试图在自定义JsonConverter自己写出$type name元数据; 但是,在反序列化时,转换器将被完全绕过。 是否有解决方法或处理此类情况的正确方法?

使用每行键将DataTable转换为JSON

我认为以下是一个非常常见的任务,并假设有一个简单的解决方案,但我找不到一个。 如果我有以下结构的数据表。 ID Name Active ID1 John TRUE ID2 Bill FALSE 我想将其序列化为JSON对象,其中ID列是JSON对象中的节点,如: [ { “ID1”: { “Name”: “John”, “Active”: “True” }, “ID2”: { “Name”: “Bill”, “Active”: “False” } } ] 我查看了JSON.NET但无法使其工作。 编辑:我正在使用C#

json从遗留属性名称反序列化

如何设置Newtonsoft.Json以使用旧成员名称反序列化对象,但使用当前成员名称对其进行序列化? 这是一个需要序列化和反序列化的示例对象。 我给了一个属性属性,其中包含过去可能已经序列化的名称列表。 [DataContract] class TestObject { [LegacyDataMemberNames(“alpha”, “omega”)] [DataMember(Name = “a”)] public int A { get; set; } } 我想json序列化始终使用名称“a”,但能够从任何遗留名称反序列化为一个属性,包括“alpha”和“omega”以及当前名称“a”

如何通过调用JsonConvert.DeserializeObject并禁用应用于基类型的JsonConverter?

编辑:澄清问题: 我已经覆盖了JsonConverter的基类型(通过将[JsonConverter(typeof(TConverter))]到超类中,但是当直接反序列化子类型时,我想使用STANDARD序列化(即没有自定义转换器)来反序列化我的派生宾语。 如何在deserialize方法中指定STANDARD序列化,就像我没有覆盖JsonConverter一样? 我使用弹性搜索,不能使用我自定义的JsonConverter实现调用JsonConvert.DeserializeObject,并且必须依赖Elastic的属性才能使用我的转换器。 但是,使用此转换器作为属性似乎也会影响所有子类,但我只是希望它们使用标准转换器,因此我不必为许多实现中的每一个实现JsonConverter。 这是我希望它看起来的类/逻辑: [Route(“test”)] [HttpPost] public HttpResponseMessage Test([FromBody] JToken json) { var res = json.ToObject(); // I want an object of ProductImpl type here return Request.CreateResponse(res); } [JsonConverter(typeof(JsonProductConverted))] public abstract class Product { } public class ProductImpl : Product { } public class JsonProductConverted : JsonConverter { public override void WriteJson(JsonWriter writer, […]

使用JSON.net,在基类上下文中使用时,如何防止派生类的属性序列化?

给定一个数据模型: [DataContract] public class Parent { [DataMember] public IEnumerable Children { get; set; } } [DataContract] public class ChildId { [DataMember] public string Id { get; set; } } [DataContract] public class ChildDetail : ChildId { [DataMember] public string Name { get; set; } } 出于实现方便的原因,有时Parent上的ChildDetail对象实际上是ChildDetail对象。 当我使用JSON.net序列化Parent ,它们将被写出所有ChildDetail属性。 是否有任何方法可以指示JSON.net(或任何其他JSON序列化程序,我还不能提交到项目中),在序列化为基类时忽略派生类属性? 编辑:重要的是,当我直接序列化派生类时,我能够生成所有属性。 我只想抑制Parent对象中的多态性。

如何从JSON字符串获取深层嵌套属性?

如何使用JSON.NET从JSON中获取“myThings”数组,如下所示? 例1: { “z”: { “a”: 1, “b”: 2 }, “something”: { “y”: [1, 2], “somethingElse”: { “1234”: { “foo”: “bar”, “myThings”: [{ “name”: “bob”, “age”: 3 }, { “name”: “bob”, “age”: 3 }] } } } } 例2: { “z”: { “a”: 1, “b”: 2 }, “something”: { “y”: [1, 2], “somethingElse”: { “7890”: […]

我可以选择在运行时关闭JsonIgnore属性吗?

我正在从一组类中使用Newtonsoft.Json创建一个JSON文件。 创建的文件非常大,所以我为属性创建了JsonProperty以减小大小,并为某些数据类型添加了JsonIgnore和自定义格式。 结果是从24MB减少到1MB,这很好; 但是,我希望选择在运行时生成完整版本或简化属性版本。 无论如何,我可以让序列化程序选择使用属性吗?

JSON反序列化 – 使用JSON.NET将数组索引映射到属性

我想将二维数组反序列化为.net对象的集合。 原因是,我的用户可以更容易地在输入文件中使用数组语法。 所以我只想将数组的索引映射到我的目标类型的特定属性。 EG用: [ [“John”, “Smith”, “23”], [“Paula”, “Martin”, “54] ] 我会得到一个人的两个实例: public class Person { public string First {get;set;} public string Last {get;set;} public string Age {get;set;} } 其中内部数组的索引0映射到First ,索引1映射到Last ,索引2映射到Age ; 有没有办法扩展Json.NET,以便我可以在反序列化期间进行映射,以便隐藏实现细节? 我一直在玩一个自定义的JsonConverter但我没有找到关于如何使用它的更多信息。 编辑:具体来说,我不确定JsonConverter是否正确使用,我无法弄清楚如何实现CanConvert以及如何使用传递给ReadJson方法的参数。

为什么JSON .Net不能序列化静态或const成员变量?

我无法在任何地方找到答案,但是当我尝试使用static或const成员变量序列化结构或类时,默认情况下它们不会序列化。 如果我尝试通过设置MemberSerialization.OptIn强制序列化,我收到一个错误。 恩。 [JsonObject(MemberSerialization.OptIn)] public class Test { [JsonProperty] public int x = 1; [JsonProperty] public static int y = 2; } 如果我尝试使用以下命令序列化此类: Test t = new Test(); string s = JsonConvert.SerializeObject( t ); 我收到错误Error getting value from ‘y’ on ‘Test’ 。 如果y是const,也会发生同样的情况。 我的理论是静态和const值存储在内存中特殊的地方,并且由于某种原因,Json序列化器试图访问它们。 这完全是一种预感,我在C#Reference for Static中看不到任何帮助。 我对C#比较陌生 – 在这一点上,这真的是一个好奇的问题。

JSON.net – 字段是字符串或List

我有一种情况,从REST服务返回的JSON返回一个Movie-objects列表,所有这些都是通过大量信息进行的。 REST -service结果中的几个字段根据可用信息而变化。 一个例子:电影总是有一些屏幕截图(图像),演员和导演。 根据所讨论的电影,可能有一个或多个图像,一个或多个演员以及一个或多个导演。 几个案例的示例JSON: { “title”: “Movie title”, “images”: [ “http://sofzh.miximages.com/c%23/img_0.jpg”, “http://sofzh.miximages.com/c%23/img_1.jpg”, “http://sofzh.miximages.com/c%23/img_2.jpg”, “http://sofzh.miximages.com/c%23/img_3.jpg”, “http://sofzh.miximages.com/c%23/img_4.jpg” ], “actors”: [ “Steven Berkoff”, “Nikolaj Coster-Waldau”, “Julie Cox” ], “directors”: “Simon Aeby” }, { “title”: “Another movie”, “images”: “http://sofzh.miximages.com/c%23/img_1.jpg”, “actors”: “actor 1” “directors”: [ “Justin Bieber”, “Justin Timberlake” ] } 问题是,使用JSON.net,我如何创建一个处理这个问题的转换器? 我一直在搜索互联网,但仍然没有找到解决方案。 关于同一个问题的另一个问题:如果字段是字符串列表或简单字符串,如何使JSON.NET以任何方式创建List(如果只是一个简单的字符串,则创建一个包含一个成员的列表) 编辑:这个REST服务不受我的控制