【问题标题】:Represent JSON in strongly typed POCO class在强类型 POCO 类中表示 JSON
【发布时间】:2014-08-28 03:49:56
【问题描述】:

我在 C# 中有一个代表 JSON 对象的 POCO 类:

public int id {get; set;}
public string name {get; set;}
public string description {get; set;}

JSON

{ 
    "id" : 1,
    "name" : "name",
    "description" : "description"
}

现在 json 将添加这些属性:

{
    "property_1" : "value_1",
    "property_2" : "value_2",
    "property_3" : "value_3"
//etc
}

属性可以少至 0,也可多至所需,但它们都将被命名为 property_ 和一个数字。 因此,对于该类,我想要某种 List<>,而不是单独对每个属性进行硬编码,然后返回 Json 对象(我正在使用 MVC)我想将 List<> 拆分为单个对象,我该怎么做?

而不是:

return Json(property_1, property_2, property_3);

我想要:

return Json(properties.Split());

【问题讨论】:

  • 只是好奇,您为什么不将集合/名称-值-对用于这些对象,既作为服务器端对象又表示为 JSON?
  • @Moby'sStuntDouble json 对象正在被 web 服务使用,这就是它的属性设置方式,我无法控制它。
  • 请以你的名义打给我提供网络服务的人 :)

标签: c# asp.net-mvc json


【解决方案1】:

如果您使用 Json.NET 进行 JSON 序列化,则可以使用 [JsonExtensionData] 属性来捕获您尚未编码的属性。从 Json.NET 5.0.8 开始,此属性会影响序列化和反序列化,以确保您的 POCO 对象支持往返。

在实践中,我将此属性放在抽象基类中的一个字段上,我的所有模型类都派生自该字段:

ExtensibleJsonObject

【讨论】:

  • 这很有趣!它应该开辟一些有趣的可能性。谢谢! ;)
【解决方案2】:

您可以编写自己的自定义 MediaTypeFormatter 并将其插入到标准 JsonFormatter 前面的 HttpConfiguration.Formatters 集合中,或者扩展标准并完全替换它。 (我建议前者。)

MediaTypeFormatters 让您可以在原始流进入时访问它,并且您基本上可以使用所有 JSON.NET 对序列化和反序列化进行任何您想做的事情。

【讨论】:

    猜你喜欢
    • 2012-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-16
    • 1970-01-01
    相关资源
    最近更新 更多