当前位置: 首页 > 面试题库 >

具有内部属性的JSON序列化器对象

岳浩
2023-03-14
问题内容

我有一些内部属性的类,我也想将它们序列化为json。我该怎么做?例如

public class Foo
{
    internal int num1 { get; set; }
    internal double num2 { get; set; }
    public string Description { get; set; }

    public override string ToString()
    {
        if (!string.IsNullOrEmpty(Description))
            return Description;

        return base.ToString();
    }
}

使用保存

Foo f = new Foo();
f.Description = "Foo Example";
JsonSerializerSettings settings = new JsonSerializerSettings() { TypeNameHandling = TypeNameHandling.All };

 string jsonOutput = JsonConvert.SerializeObject(f, Formatting.Indented, settings);

 using (StreamWriter sw = new StreamWriter("json_file.json"))
 {
     sw.WriteLine(jsonOutput);
 }

我懂了

{  
"$type": "SideSlopeTest.Foo, SideSlopeTest",
"Description": "Foo Example"
}

问题答案:

[JsonProperty]属性标记要序列化的内部属性:

public class Foo
{
    [JsonProperty]
    internal int num1 { get; set; }
    [JsonProperty]
    internal double num2 { get; set; }

    public string Description { get; set; }

    public override string ToString()
    {
        if (!string.IsNullOrEmpty(Description))
            return Description;

        return base.ToString();
    }
}

然后再测试:

Foo f = new Foo();
f.Description = "Foo Example";
f.num1 = 101;
f.num2 = 202;
JsonSerializerSettings settings = new JsonSerializerSettings() { TypeNameHandling = TypeNameHandling.All };

var jsonOutput = JsonConvert.SerializeObject(f, Formatting.Indented, settings);

Console.WriteLine(jsonOutput);

我得到以下输出:

{
  "$type": "Tile.JsonInternalPropertySerialization.Foo, Tile",
  "num1": 101,
  "num2": 202.0,
  "Description": "Foo Example"
}

(其中“ Tile.JsonInternalPropertySerialization”和“ Tile”是我正在使用的名称空间和程序集名称)。

顺便说一句
,使用时TypeNameHandling,千万注意从这个谨慎的Newtonsoft文档:

当您的应用程序从外部源反序列化JSON时,应谨慎使用TypeNameHandling。反序列化除None以外的其他值时,应使用自定义SerializationBinder验证传入的类型。



 类似资料:
  • 大家好,我需要序列化一个带有字典的对象的响应,动态地离开了json示例。我试图在一个c#类中序列化这个响应对象(request_validator),但这不起作用,请谁能帮助我,有什么想法吗?对不起我的英语谢谢

  • 问题内容: 我有一堂课POJO 我有一个像 我正在使用Jackson ObjectMapper进行反序列化。在不创建任何其他父类的情况下如何获得? 如果不可能,是否有可能获得仅包含json字符串的第一个元素的对象,即在这种情况下和? 问题答案: 您首先需要获取数组 打印(带有)

  • 问题内容: .NET 4是否附带任何可对JSON数据进行序列化/反序列化的类? 我知道有第三方库,例如JSON.NET,但是我正在寻找内置在.NET中的东西。 我在MSDN上找到了数据合同,但是它是用于WCF的,而不是Winforms或WPF的。 问题答案: 您可以在任何需要的地方使用DataContractJsonSerializer类,它只是一个.net类,不仅限于WCF。有关如何在此处和此处

  • 问题内容: 我正在使用Jackson的反序列化包含接口作为其属性之一的对象的JSON表示。可以在此处看到代码的简化版本: https://gist.github.com/sscovil/8735923 基本上,我有一个具有两个属性的类:和。JSON模型如下所示: 该属性被定义为所谓的接口,我有实现它的几个类(例如,)。这个想法是图像文件与文档文件等具有不同的属性(高度,宽度)。 我在工作过的例子这

  • 我的后端使用Springboot和Gson。我有这两个类的多对多关系: 订单类 产品类别 这是我用来向restendpoint提供数据的服务 以下是回应: 我的目标是反序列化/转义String属性。 我尝试过创建一个类并使用注释,但据我所知,当您需要为反序列化提供自定义行为时使用此注释,我示例中的JSON字符串非常简单,我不需要任何特定的逻辑。

  • 我需要反序列化以下json: 将它的< code>id属性设置为< code>foo_id json属性。 我需要在自定义反序列化程序中执行此操作。实现这一点最简单的方法是什么? 我想以某种方式将json“转换”为 然后将此委托给杰克逊。 在本例中,对象的类型为Foo,但其他对象可能不属于此类。另外,在本例中,json是一个数字,但如果它也是一个字符串,我希望支持。所以,我需要一种通用的方法来做到