【问题标题】:Serialize some relationships to JSON, but not all将一些关系序列化为 JSON,但不是全部
【发布时间】:2019-07-08 11:19:35
【问题描述】:

我有以下问题:我正在尝试使用 Newtonsoft.Json 包将对象(object1)序列化为 Json。我需要能够将其发送到服务器。问题是 object1 有几个引用的对象,一些应该与 object1 一起创建,但其中一个在服务器上是“只读”的,所以它必须作为关系发送。

我正在使用string json = JsonConvert.SerializeObject 示例:

<code>
    [DataContract]
    public class Object1
    {
        // Simple Properties
        [JsonProperty(PropertyName = "ext_ref", Order = 1)]
        public string ExtRef { get; set; }
        [JsonProperty(PropertyName = "external_comment", Order = 1)]
        public string ExternalComment { get; set; }
        [JsonProperty(PropertyName = "internal_comment", Order = 1)]
        public string InternalComment { get; set; } 
        [JsonProperty(PropertyName = "object2")]
        public Object2 Object2 { get; set; }
        [JsonProperty(PropertyName = "object3")]
        public Object3 Object3 { get; set; }
    }
</code>

这就是我获取它的方式。这适用于大多数对象,但不是全部:

{
"data": {
    "attributes": {         
        "ext_ref": "2573421",
        "external_comment": "Ext Comment",
        "internal_comment": "Internal comment",
        "object2": {
            "data": {
                "attributes": {
                    "xx":"XX", 
                    "yy":"YY"
                },
                "id": "1",
                "type": "object2s"
            },
            "object3": {
            "data": {
                "attributes": {
                    "xx":"XX", 
                    "yy":"YY"
                },
                "id": "1",
                "type": "object3s"
            }
        },          
    },
    "type": "object1"
}

因为object2是一个“特例”,它只能被服务器理解为一个链接,所以它需要看起来像这样:

{
"data": {
    "attributes":{          
        "ext_ref": "2573421",
        "external_comment": "Ext Comment",
        "internal_comment": "Internal comment",
         "object3": {
            "data": {
                "attributes": {
                    "xx":"XX", 
                    "yy":"YY"
                },
                "id": "1",
                "type": "object3s"
            }
    },
    "type": "object1",
    "relationships":{
        "object2": {
            "data": {
                "id": "1",
                "type": "object2s"
            }
        }
     }
}

现在我的问题是:有没有一种简单的方法可以做到这一点?

我尝试了以下方法: 使用 JsonApiSerializer 中的关系属性 更改 object2.id 属性的 JsonProperty 设置 删除object2.id

我不禁想到必须有一些属性可以用来获得所需的结果,但是 atm.我被卡住了

[编辑] 我添加了一个示例对象结构

【问题讨论】:

  • 看看CustomConverter, here 一些例子。
  • 所以我试图简化这一点,如果我错了,请纠正我。你得到一个 JSON 字符串,如第一个 sn-p 所示,但你想要 JSON 字符串,如第二个代码 sn-p 所示。
  • 是的。但仅适用于我的一个相关对象,而不是全部。

标签: c# json serialization json.net


【解决方案1】:

好的,我发现了错误。我正在使用 Newtonsoft.Json 通过此调用创建 Json: string json = JsonConvert.SerializeObject(order, Format.None, new JsonApiSerializerSettings { NullValueHandling = NullValueHandling.Ignore }); 导致问题的部分是 Format.None,它使 Json 成为基本 Json,而不是通常的格式。我把它改成null,得到了我想要的结果。大哇,想为此而战吗?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-18
    • 2012-05-31
    • 1970-01-01
    • 2020-11-27
    相关资源
    最近更新 更多