我有以下问题:我正在尝试使用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。我被困住了
[编辑] 我添加了一个示例对象结构
答案 0 :(得分:0)
好的,我发现了错误。我正在使用Newtonsoft.Json通过以下调用创建Json:
string json = JsonConvert.SerializeObject(order, Format.None,
new JsonApiSerializerSettings {
NullValueHandling = NullValueHandling.Ignore
});
导致该问题的部分是Format.None,它使Json成为基本的Json,而不是通常的格式。我将其更改为null,然后得到了想要的结果。大惊小怪,想为此奋斗吗?