Tag: json.net

忽略在序列化为JSON时抛出exception的类成员

我正在使用Newtonsoft JSON序列化程序,它适用于大多数对象。 不幸的是,当我尝试序列化一个大对象时,我得到一个JsonSerializationException ,其中一个成员抛出一个NullReferenceException 。 反正有没有忽略违规成员并序列化对象的其余部分? 我想也许在JsonSerializerSettings ? 这是我想要做的简化版本: private class TestExceptionThrowingClass { public string Name { get { return “The Name”; } } public string Address { get { throw new NullReferenceException(); } } public int Age { get { return 30; } } } [Test] public void CanSerializeAClassWithAnExceptionThrowingMember() { // Arrange var toSerialize […]

解析json字符串以查找和元素(键/值)

我在文件timezones.json中跟随json: { “Atlantic/Canary”: “GMT Standard Time”, “Europe/Lisbon”: “GMT Standard Time”, “Antarctica/Mawson”: “West Asia Standard Time”, “Etc/GMT+3”: “SA Eastern Standard Time”, “Etc/GMT+2”: “UTC-02”, “Etc/GMT+1”: “Cape Verde Standard Time”, “Etc/GMT+7”: “US Mountain Standard Time”, “Etc/GMT+6”: “Central America Standard Time”, “Etc/GMT+5”: “SA Pacific Standard Time”, “Etc/GMT+4”: “SA Western Standard Time”, “Pacific/Wallis”: “UTC+12”, “Europe/Skopje”: “Central European Standard Time”, “America/Coral_Harbour”: […]

如何使用NewtonSoft更新JSON对象的属性

我有一个像这样的JSON字符串: { “code”: “GENDER”, “value”: { “option”: “ML” } } 如果值为”ML” ,我想将option属性更新为”Male”如果值为”FM”我想将”Male”属性”Male”更新为”Female” “FM” 。 我已达到这一点,但我不确定如何继续: JArray contentobject = (JArray)JsonConvert.DeserializeObject(contentJSON); JObject voicgObj = contentobject.Children().FirstOrDefault(ce => ce[“code”].ToString() == “GENDER”) as JObject; JProperty voicgProp = voicgObj.Property(“value”); 我不知道如何获得value的孩子的选择。 提前致谢。 任何指针都会很棒。

使用WebAPI进行JSON.NET抽象/派生类反序列化2

我正在实现一个使用JSON.NET进行序列化的Web API 2服务。 当我尝试PUT(deseralize)更新的json数据时,抽象类不存在意味着它不知道如何处理它所以它什么也没做。 我也尝试使类不是抽象的,只是从它inheritance,然后每个PUT去除了基类,而不是缺少了类的属性。 例: public class People { // other attributes removed for demonstration simplicity public List People { get;set; } } public abstract class Person { public string Id {get;set;} public string Name {get;set;} } public class Employee : Person { public string Badge {get;set;} } public class Customer : Person { […]

如何在序列化特定类型时使JSON.Net序列化程序调用ToString()?

我正在使用Newtonsoft.Json序列化程序将C#类转换为JSON。 对于某些类,我不需要序列化程序将实例添加到单个属性,而只需在对象上调用ToString,即 public class Person { public string FirstName { get; set; } public string LastName { get; set; } public override string ToString() { return string.Format(“{0} {1}”, FirstName, LastName ); } } 我应该怎么做才能将Person对象序列化为ToString()方法的结果? 我可能有很多像这样的类,所以我不想最终得到一个特定于Person类的序列化程序,我希望有一个可以适用于任何classe(通过属性我猜)。

从模型validation中排除类型(示例DbGeography)以避免InsufficientExecutionStackException

更新:对于tl; dr版本跳到底部 我有一个非常简单的JsonConverter子类,我正在使用Web API: public class DbGeographyJsonConverter : JsonConverter { public override bool CanConvert(Type type) { return typeof(DbGeography).IsAssignableFrom(type); } public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { var value = (string)reader.Value; if (value.StartsWith(“POINT”, StringComparison.OrdinalIgnoreCase)) { return DbGeography.PointFromText(value, DbGeography.DefaultCoordinateSystemId); } else if (value.StartsWith(“POLYGON”, StringComparison.OrdinalIgnoreCase)) { return DbGeography.FromText(value, DbGeography.DefaultCoordinateSystemId); } else //We don’t […]

Json.Net – 从’System.Net.IPAddress’上的’ScopeId’获取值时出错

我试图用Json.Net序列化IPEndpoint对象,我得到以下错误: 从’System.Net.IPAddress’上的’ScopeId’获取值时出错。 错误的原因是我只使用端点中IPAddress对象的IPV4属性。 当Json解析器尝试解析IPv6部分时,它会访问ScopeID属性,该属性会引发套接字exception“对于引用的对象类型,不支持尝试的操作”(null将足以支持microsoft!) 我想知道除了撕掉所有内容并将地址信息编码为字符串之外是否还有其他解决方法? 在某些时候,我确实想支持IPV6。 如果IPAddress系列设置为Internetwork而不是InternetworkIPV6,是否有任何可以在Json.NET中完成忽略错误或只是不尝试序列化ScopeID? 谢谢, Dinsdale

如何使用JsonConverter仅序列化类的inheritance属性

我正在尝试使用json.net仅序列化类的inheritance属性。 我知道[JsonIgnore]属性,但我只想在某些场合忽略它们,所以我使用了自定义的JsonConverter。 这是我的class级: public class EverythingButBaseJsonConverter : JsonConverter { public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) { // Find properties of inherited class var classType = value.GetType(); var classProps = classType.GetProperties(BindingFlags.DeclaredOnly | BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic).ToList(); // Remove the overrided properties classProps.RemoveAll(t => { var getMethod = t.GetGetMethod(false); return (getMethod.GetBaseDefinition() != getMethod); […]

使用Newtonsoft C#从json转换为Enum

我如何将json反序列化为C#中的枚举列表? 我写了以下代码: //json “types” : [ “hotel”, “spa” ] public enum eType { [Description(“hotel”)] kHotel, [Description(“spa”)] kSpa } public class HType { List m_types; [JsonProperty(“types”)] public List HTypes { get { return m_types; } set { // i did this to try and decide in the setter // what enum value should be for each […]

从流中加载多个连接的JSON对象

我读了几个类似的问题,但没有发现任何与JObject相关的问题。 这是问题所在:我有一个带有连接JSON对象的Stream,即: {“key1″:”value1”}{“key2″:”value2”}{“key3″:”value3”} 现在,我想逐个将这些对象读入JObject。 这是我试图这样做的方式: public class JsonStreamReader : JsonTextReader { public JsonStreamReader(Stream s) : base(new StreamReader(s)) {} } private void LoadJson(Stream s) { var r = new JsonStreamReader(s) { SupportMultipleContent = true }; var obj = JObject.Load(r); // … get data from JObject … } 这里的问题是JObject.Load()从流中读取所有可用数据,但只解析第一个对象并丢弃所有其余对象。 我该如何处理? 并且只是在XY问题的情况下(为什么我需要):我想通过TCP流传输JSON消息。 因为我使用原始TCP流,我需要知道要读取它的消息的大小。 我决定在每条消息之前编写带有size和message type小标题,因此我可以将标题读入一个小缓冲区,获取以下消息的大小然后完全读取它。