将一些关系序列化为JSON,但不是全部

时间:2019-02-14 12:20:18

标签: c# json serialization json.net

我有以下问题:我正在尝试使用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的Relationship属性 更改object2.id属性的JsonProperty设置 删除object2.id

我不禁想到必须使用一些属性才能获得理想的结果,但是atm。我被困住了

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

1 个答案:

答案 0 :(得分:0)

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