【发布时间】: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