相关疑难解决方法(0)

在JSON.NET中自定义转换特定对象

我正在使用JSON.NET来序列化我的一些对象,我想知道是否有一种简单的方法来覆盖特定对象的默认json.net转换器?

目前我有以下课程:

public class ChannelContext : IDataContext
{
    public int Id { get; set; }
    public string Name { get; set; }
    public IEnumerable<INewsItem> Items { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

JSON.NET目前序列化如上:

{
    "Id": 2,
    "Name": "name value",
    "Items": [ item_data_here ]
}
Run Code Online (Sandbox Code Playgroud)

是否可能只针对该特定类以这种方式格式化它:

"Id_2":
{
    "Name": "name value",
    "Items": [ item data here ]
}
Run Code Online (Sandbox Code Playgroud)

我是JSON.NET的新手..我想知道上面是否与编写自定义转换器有关.我无法找到关于如何写一个的具体例子.如果有人能指出我的具体来源,我会非常感激.

我需要找到一个解决方案,使特定类始终转换相同,因为上面的上下文是更大的上下文的一部分,JSON.NET默认转换器转换得很好.

希望我的问题足够明确......

更新:

我已经找到了如何创建一个新的自定义转换器(通过创建一个继承自JsonConverter的新类并覆盖它的抽象方法),我重写了WriteJson方法,如下所示:

public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
    {
        ChannelContext contextObj = value as ChannelContext;

        writer.WriteStartObject();
        writer.WritePropertyName("id_" + contextObj.Id); …
Run Code Online (Sandbox Code Playgroud)

.net c# json json.net

31
推荐指数
1
解决办法
3万
查看次数

如何更改数字反序列化的默认类型?

我正在将一些属性反序列化为a Dictionary<string, object>.

当我反序列化JSON一些,它填充DictionaryInt64对象,而不是Int32.我希望它能够选择Int32作为默认值,知道我可以使用转换时会溢出的javascript数字.在这种情况下抛出异常是完全可以接受的.

有没有办法实现这一目标?我希望有一些很好的属性或一个方便的界面,可以实现并添加到JsonSerializer.而且我担心我必须深入到Json.NET的深处.

基本上我想有一些方法来控制对象的已知类型,这样我就可以Int32代替Int64DateTimes不是代替Strings.

c# json.net

19
推荐指数
1
解决办法
1万
查看次数

将JsonSerializerSettings从JsonSerializer复制到新的JsonSerializer

有没有办法从类中取出设置JsonSerializer并重新实现它们JsonSerializer

似乎没有任何方法可以做这样的事情.我找到的最好的是通过反射调用的私有方法ApplySerializerSettings.

我正在尝试从WriteJson方法中获取序列化程序并将其复制到新的序列化程序中,稍微调整一下.具体来说我想替换ContractResolver.

public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
Run Code Online (Sandbox Code Playgroud)

c# serialization json.net

15
推荐指数
2
解决办法
2583
查看次数

使用Json.NET序列化时会忽略特定的数据类型?

我将JSON对象保存到数据库中,有时它会变得很大(我的对象长度为205,797个字符),我想尽可能地消除大小。这些对象有很多我不需要的GUID字段,如果有一种方法可以忽略序列化的任何GUID类型,则可能有助于消除大小。

这是我的代码,我在应用程序中传递了任何模型类型的对象:

 public static string GetEntityAsJson(object entity)
 {
     var json = JsonConvert.SerializeObject(entity, Formatting.None, new JsonSerializerSettings
     {
         ReferenceLoopHandling = ReferenceLoopHandling.Ignore
     });
     return json;
}
Run Code Online (Sandbox Code Playgroud)

编辑

我不想使用JsonIgnore属性,因为我必须将其添加到这么多的类中,每个类都具有许多GUID属性,我正在寻找一些简单的方法: IgnoreDataType = DataTypes.GUID

c# serialization json json.net deserialization

5
推荐指数
1
解决办法
2593
查看次数

标签 统计

c# ×4

json.net ×4

json ×2

serialization ×2

.net ×1

deserialization ×1