C# ; 集合;} [JsonProperty(“名字”)] 公共字符串名{get;set;} [JsonProperty(“姓氏”)] 公共字符串LastName{get;set;} [JsonProperty(“修改日期”)] 公共DateTimeOffset修改日期{get;set;} } 公共部分结构ValueElement { 公共字符串; 公共价值阶层; 公共静态隐式运算符ValueElement(string)=>new ValueElement{string=string}; 公共静态隐式运算符ValueElement(ValueClass ValueClass)=>new ValueElement{ValueClass=ValueClass}; } 内部静态类转换器2 { 公共静态只读JsonSerializerSettings设置=新JsonSerializerSettings { MetadataPropertyHandling=MetadataPropertyHandling.Ignore, DateParseHandling=DateParseHandling.None, 转换器= { ValueElementConverter.Singleton, 新的IsoDateTimeConverter{DateTimeStyles=DateTimeStyles.AssumeUniversal} }, }; } 内部类ValueElementConverter:JsonConverter { 公共覆盖布尔CanConvert(Type t)=>t==typeof(ValueElement)| | t==typeof(ValueElement?); 公共重写对象ReadJson(JsonReader阅读器,类型t,对象existingValue,JsonSerializer序列化程序) { 开关(reader.TokenType) { case JsonToken.String: 案例JsonToken。日期: var stringValue=serializer.Deserialize(读取器); 返回新的ValueElement{String=stringValue}; 案例JsonToken.StartObject: var objectValue=serializer.Deserialize(读取器); 返回新的ValueElement{ValueClass=objectValue}; } 抛出新异常(“无法解组类型ValueElement”); } public override void WriteJson(JsonWriter编写器、对象非类型化值、JsonSerializer序列化器) { var值=(ValueElement)非类型值; if(value.String!=null) { serializer.Serialize(writer,value.String); 回来 } 如果(value.ValueClass!=null) { serializer.Serialize(writer,value.ValueClass); 回来 } 抛出新异常(“无法封送类型ValueElement”); } 公共静态只读ValueElementConverter Singleton=新的ValueElementConverter(); } }
像这样反序列化:C# ; 集合;} [JsonProperty(“名字”)] 公共字符串名{get;set;} [JsonProperty(“姓氏”)] 公共字符串LastName{get;set;} [JsonProperty(“修改日期”)] 公共DateTimeOffset修改日期{get;set;} } 公共部分结构ValueElement { 公共字符串; 公共价值阶层; 公共静态隐式运算符ValueElement(string)=>new ValueElement{string=string}; 公共静态隐式运算符ValueElement(ValueClass ValueClass)=>new ValueElement{ValueClass=ValueClass}; } 内部静态类转换器2 { 公共静态只读JsonSerializerSettings设置=新JsonSerializerSettings { MetadataPropertyHandling=MetadataPropertyHandling.Ignore, DateParseHandling=DateParseHandling.None, 转换器= { ValueElementConverter.Singleton, 新的IsoDateTimeConverter{DateTimeStyles=DateTimeStyles.AssumeUniversal} }, }; } 内部类ValueElementConverter:JsonConverter { 公共覆盖布尔CanConvert(Type t)=>t==typeof(ValueElement)| | t==typeof(ValueElement?); 公共重写对象ReadJson(JsonReader阅读器,类型t,对象existingValue,JsonSerializer序列化程序) { 开关(reader.TokenType) { case JsonToken.String: 案例JsonToken。日期: var stringValue=serializer.Deserialize(读取器); 返回新的ValueElement{String=stringValue}; 案例JsonToken.StartObject: var objectValue=serializer.Deserialize(读取器); 返回新的ValueElement{ValueClass=objectValue}; } 抛出新异常(“无法解组类型ValueElement”); } public override void WriteJson(JsonWriter编写器、对象非类型化值、JsonSerializer序列化器) { var值=(ValueElement)非类型值; if(value.String!=null) { serializer.Serialize(writer,value.String); 回来 } 如果(value.ValueClass!=null) { serializer.Serialize(writer,value.ValueClass); 回来 } 抛出新异常(“无法封送类型ValueElement”); } 公共静态只读ValueElementConverter Singleton=新的ValueElementConverter(); } },c#,deserialization,json-deserialization,C#,Deserialization,Json Deserialization,像这样反序列化: var myObject = JsonConvert.DeserializeObject<Request>(json, Converter2.Settings); var myObject=JsonConvert.DeserializeObject(json,Converter2.Settings); 我能够用 看起来效果不错。 代码如下: using System; using System.Collections.Generic; using System.
var myObject = JsonConvert.DeserializeObject<Request>(json, Converter2.Settings);
var myObject=JsonConvert.DeserializeObject(json,Converter2.Settings);
我能够用
看起来效果不错。代码如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Globalization;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
namespace QuickType
{
public partial class Request
{
[JsonProperty("status")]
public string Status { get; set; }
[JsonProperty("value")]
public ValueElement[][] Value { get; set; }
}
public partial class ValueClass
{
[JsonProperty("role")]
public string Role { get; set; }
[JsonProperty("company")]
public string Company { get; set; }
[JsonProperty("first_name")]
public string FirstName { get; set; }
[JsonProperty("last_name")]
public string LastName { get; set; }
[JsonProperty("modification_date")]
public DateTimeOffset ModificationDate { get; set; }
}
public partial struct ValueElement
{
public string String;
public ValueClass ValueClass;
public static implicit operator ValueElement(string String) => new ValueElement { String = String };
public static implicit operator ValueElement(ValueClass ValueClass) => new ValueElement { ValueClass = ValueClass };
}
internal static class Converter2
{
public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
{
MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
DateParseHandling = DateParseHandling.None,
Converters =
{
ValueElementConverter.Singleton,
new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
},
};
}
internal class ValueElementConverter : JsonConverter
{
public override bool CanConvert(Type t) => t == typeof(ValueElement) || t == typeof(ValueElement?);
public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
{
switch (reader.TokenType)
{
case JsonToken.String:
case JsonToken.Date:
var stringValue = serializer.Deserialize<string>(reader);
return new ValueElement { String = stringValue };
case JsonToken.StartObject:
var objectValue = serializer.Deserialize<ValueClass>(reader);
return new ValueElement { ValueClass = objectValue };
}
throw new Exception("Cannot unmarshal type ValueElement");
}
public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
{
var value = (ValueElement)untypedValue;
if (value.String != null)
{
serializer.Serialize(writer, value.String);
return;
}
if (value.ValueClass != null)
{
serializer.Serialize(writer, value.ValueClass);
return;
}
throw new Exception("Cannot marshal type ValueElement");
}
public static readonly ValueElementConverter Singleton = new ValueElementConverter();
}
}
使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用系统文本;
使用System.Threading.Tasks;
利用制度全球化;
使用Newtonsoft.Json;
使用Newtonsoft.Json.Converters;
命名空间快速类型
{
公共部分类请求
{
[JsonProperty(“状态”)]
公共字符串状态{get;set;}
[JsonProperty(“价值”)]
public ValueElement[]值{get;set;}
}
公共部分类ValueClass
{
[JsonProperty(“角色”)]
公共字符串角色{get;set;}
[JsonProperty(“公司”)]
公共字符串公司{get;set;}
[JsonProperty(“名字”)]
公共字符串名{get;set;}
[JsonProperty(“姓氏”)]
公共字符串LastName{get;set;}
[JsonProperty(“修改日期”)]
公共DateTimeOffset修改日期{get;set;}
}
公共部分结构ValueElement
{
公共字符串;
公共价值阶层;
公共静态隐式运算符ValueElement(string)=>new ValueElement{string=string};
公共静态隐式运算符ValueElement(ValueClass ValueClass)=>new ValueElement{ValueClass=ValueClass};
}
内部静态类转换器2
{
公共静态只读JsonSerializerSettings设置=新JsonSerializerSettings
{
MetadataPropertyHandling=MetadataPropertyHandling.Ignore,
DateParseHandling=DateParseHandling.None,
转换器=
{
ValueElementConverter.Singleton,
新的IsoDateTimeConverter{DateTimeStyles=DateTimeStyles.AssumeUniversal}
},
};
}
内部类ValueElementConverter:JsonConverter
{
公共覆盖布尔CanConvert(Type t)=>t==typeof(ValueElement)| | t==typeof(ValueElement?);
公共重写对象ReadJson(JsonReader阅读器,类型t,对象existingValue,JsonSerializer序列化程序)
{
开关(reader.TokenType)
{
case JsonToken.String:
案例JsonToken。日期:
var stringValue=serializer.Deserialize(读取器);
返回新的ValueElement{String=stringValue};
案例JsonToken.StartObject:
var objectValue=serializer.Deserialize(读取器);
返回新的ValueElement{ValueClass=objectValue};
}
抛出新异常(“无法解组类型ValueElement”);
}
public override void WriteJson(JsonWriter编写器、对象非类型化值、JsonSerializer序列化器)
{
var值=(ValueElement)非类型值;
if(value.String!=null)
{
serializer.Serialize(writer,value.String);
回来
}
如果(value.ValueClass!=null)
{
serializer.Serialize(writer,value.ValueClass);
回来
}
抛出新异常(“无法封送类型ValueElement”);
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Globalization;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
namespace QuickType
{
public partial class Request
{
[JsonProperty("status")]
public string Status { get; set; }
[JsonProperty("value")]
public ValueElement[][] Value { get; set; }
}
public partial class ValueClass
{
[JsonProperty("role")]
public string Role { get; set; }
[JsonProperty("company")]
public string Company { get; set; }
[JsonProperty("first_name")]
public string FirstName { get; set; }
[JsonProperty("last_name")]
public string LastName { get; set; }
[JsonProperty("modification_date")]
public DateTimeOffset ModificationDate { get; set; }
}
public partial struct ValueElement
{
public string String;
public ValueClass ValueClass;
public static implicit operator ValueElement(string String) => new ValueElement { String = String };
public static implicit operator ValueElement(ValueClass ValueClass) => new ValueElement { ValueClass = ValueClass };
}
internal static class Converter2
{
public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
{
MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
DateParseHandling = DateParseHandling.None,
Converters =
{
ValueElementConverter.Singleton,
new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
},
};
}
internal class ValueElementConverter : JsonConverter
{
public override bool CanConvert(Type t) => t == typeof(ValueElement) || t == typeof(ValueElement?);
public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
{
switch (reader.TokenType)
{
case JsonToken.String:
case JsonToken.Date:
var stringValue = serializer.Deserialize<string>(reader);
return new ValueElement { String = stringValue };
case JsonToken.StartObject:
var objectValue = serializer.Deserialize<ValueClass>(reader);
return new ValueElement { ValueClass = objectValue };
}
throw new Exception("Cannot unmarshal type ValueElement");
}
public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
{
var value = (ValueElement)untypedValue;
if (value.String != null)
{
serializer.Serialize(writer, value.String);
return;
}
if (value.ValueClass != null)
{
serializer.Serialize(writer, value.ValueClass);
return;
}
throw new Exception("Cannot marshal type ValueElement");
}
public static readonly ValueElementConverter Singleton = new ValueElementConverter();
}
}
var myObject = JsonConvert.DeserializeObject<Request>(json, Converter2.Settings);