Tag: json.net

使用JsonConverter进行Json.NET自定义序列化 – 如何获取“默认”行为

我的类DataType有一个JsonConverter。 当Json中使用的普通字符串作为DataType类型的属性值时,我想做一些特殊处理。 在值是“完整”对象的情况下,我想进行“正常”反序列化。 这是我的尝试 public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { if (reader.Value != null && reader.ValueType == typeof (string)) { return someSpecialDataTypeInstance; } else if (reader.TokenType == JsonToken.StartObject) { DataType dataType = serializer.Deserialize(reader); return dataType; } else { throw new JsonSerializationException(); } } 但这不起作用,因为这一行:DataType dataType = serializer.Deserialize(reader); 导致无限递归。 这可以轻易地完成吗? […]

json newtonsoft:反序列化包含字符串列表的Object

我对这个json有以下问题: { “EVTS”: { “EVT”: [ { “ID”: “123456”, “KEY1” : “somekey”, “CATEG”: [ “cat1”, “cat2”, “cat3” ] } ]} } 这个c#类: public class myClass{ public string ID { get; set; } public string KEY1 { get; set; } public list CATEG { get; set; } } public class ESObject1 { [JsonProperty(“EVT”)] public List EVT […]

JSON.NET序列化 – DefaultReferenceResolver如何比较相等?

我正在使用JSON.NET 6.0.3。 我更改了PreserveReferences选项,如下所示: HttpConfiguration.Formatters.JsonFormatter.SerializerSettings.PreserveReferencesHandling = PreserveReferencesHandling.Objects; 我的对象图类似于以下内容: public class CarFromManufacturer { public int CarID { get; set; } public string Make { get; set; } public string Model { get; set; } public CarManufacturer Manufacturer { get; set; } } public class CarManufacturer { public int ManufacturerID { get; set; } public string Name { […]

Json.NET在序列化上获得通用属性类型名称?

我试图弄清楚如何从我的API返回一个核心对象 public class Response { public T Data {get;set;} } 其中T是具有属性的某个对象,例如 public class Thang { public string Thing {get;set;} } 使用JsonConvert.Serialize( myResponse ); 将T Data属性作为Data返回,这是正确的。 但是,如果我想使用T的类型名称呢? 因此响应Json实际上会包含一个名为Thang not Data的属性,如下所示。 { “thang”: { “thing” : “hey” } } 我很好奇是否有一个相对简单的方法来使用Json.net,或者您是否必须创建自定义JsonConverter并使用reflection来获取写入时的T类型名称? 谢谢。

Json.NET原语类型 – 使用Decimal而不是Double

在解析来自JSON的浮点数时,如何使JSON.NET返回小数而不是双精度? (它是一个具有Dictionary的序列化Dictionary )。 我已经尝试编写JsonConverter但是CanConvert方法不会被Double类型调用以尝试转换它。 有关覆盖JsonTextReader的其他代码,但在最新版本的Json.Net中似乎不可能。

如何在不调用构造函数的情况下反序列化类?

我在我的WCF数据服务中使用Json.NET。 这是我的课程(简化): [DataContract] public class Component { public Component() { // I’m doing some magic here. } } 如何在不使用JsonConvert.DeserializeObject调用构造函数的情况下反序列化该类? 对不起,如果不清楚,随时提问。

Json.net反序列化null guid案例

我正在使用包含Guid类型的私有字段和该字段的公共属性的Json.NET反序列化对象。 当我的Guid的值在我的json中为null时,我想将Guid.Empty分配给我的字段。 public class MyClass { private Guid property; public Guid Property { get { return property; } set { if (value == null) { property = Guid.Empty; } else { property = value; } } } } 但是deserializer想要访问私有字段,因为当我尝试反序列化时出现此错误: 将值{null}转换为类型’System.Guid’时出错。 路径'[0] .property’,第6行,第26位。 如何让它忽略私有字段并使用公共属性?

Json.net DefaultValueHandling免除布尔值

在使用json.net进行序列化时,我在序列化设置中使用了DefaultValueHandling.Ignore,如果将bool设置为false,则会导致删除键。 我希望单独使用bool类型免除,并申请其他类型和类。 请帮忙 提前致谢。

使用JSON.NET为对象序列化动态属性名称

我正在使用JSON.NET来序列化我的对象以连接到REST API。 我的对象中需要序列化为JSON的属性之一具有动态属性名称。 如果此属性的struct中包含的值是数值,则JSON属性为“type_id”,但如果此值为字符串值,则JSON属性名称为“type_code”。 我尝试使用自定义JsonConverter ,但是当我尝试序列化时,我收到带有此消息的JsonWriterException : “状态属性中的Token PropertyName将导致无效的JSON对象。路径”。” 下面是我的对象的子集,如下所示我没有在我的对象中指定属性名称,因为: [JsonProperty(“title”,Required=Required.Always,Order=1)] public string Title { get; set; } [JsonProperty(“date”,Order=3)] [JsonConverter(typeof(IsoDateTimeConverter))] public DateTime Date { get; set; } [JsonProperty(Order=2)] [JsonConverter(typeof(TypeIdentifierJsonConverter))] public TypeIdentifier DocTypeIdentifier { get; set; } 在TypeIdentifier类中,我在WriteJson()方法中有以下内容: public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) { TypeIdentifier docTypeId; id= (TypeIdentifier) value; writer.WritePropertyName(id.ParameterName); writer.WriteValue(id.Value); } […]

为什么不引用循环检测使用引用相等?

序列化下面的对象时,Json.Net检测到一个自引用循环并抛出exception。 该课程有两个重要特征: 它有自我指​​涉属性, Child 它重写了Equals()和GetHashCode() public class Foo { public int Value { get; set; } public Foo Child { get; set; } public override bool Equals(object obj) => (obj as Foo).Value == this.Value; public override int GetHashCode() => this.Value.GetHashCode(); } … var foo = new Foo { Value = 42, Child = new Foo […]