You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将AWS AppSync订阅返回的JSON解析为C#的onPublishResult对象

在C#中将AWS AppSync订阅返回的JSON映射到onPublishResult对象的实现方式

你当前的C#类结构和AppSync返回的JSON存在层级不匹配问题:返回的JSON最外层直接是onPublish字段,而onPublishResult类的结构是onPublishResult -> data -> onPublish -> Change。以下是两种可行的实现方案:

方案一:通过序列化特性调整属性映射

无论是使用Newtonsoft.Json(Json.NET)还是System.Text.Json,都可以通过特性标记让类属性和JSON字段直接对应,无需手动转换。

使用Newtonsoft.Json的实现

给类的属性添加JsonProperty特性,指定对应的JSON键名:

using Newtonsoft.Json;

public class Change
{
    [JsonProperty("name")]
    public string name { get; set; }
    [JsonProperty("messageName")]
    public string messageName { get; set; }
    [JsonProperty("data")]
    public string data { get; set; }
}

public class onPublishData
{
    [JsonProperty("onPublish")]
    public Change onPublish { get; set; }
}

public class onPublishResult
{
    // 将data属性映射到JSON最外层的"onPublish"字段
    [JsonProperty("onPublish")]
    public onPublishData data { get; set; }
}

执行反序列化:

// 替换为你实际获取到的JSON字符串
string appSyncJson = @"
{
 ""onPublish"": {
    ""data"": ""[{\""sourceId\":1003,\""reasonCode\":\""NoError\",\""changeType\":\""Updated\",\""data\":null,\""pId\":3,\""changeDateTime\":\""2023-07-03T17:53:32.797452Z\",\""errorMessage\":null}]"",
    ""messageName"": ""reportStatusChange"",
    ""name"": ""*******""
  }
}";

onPublishResult result = JsonConvert.DeserializeObject<onPublishResult>(appSyncJson);

使用System.Text.Json的实现

如果项目使用.NET Core/.NET 5+自带的System.Text.Json,添加JsonPropertyName特性即可:

using System.Text.Json.Serialization;

public class Change
{
    [JsonPropertyName("name")]
    public string name { get; set; }
    [JsonPropertyName("messageName")]
    public string messageName { get; set; }
    [JsonPropertyName("data")]
    public string data { get; set; }
}

public class onPublishData
{
    [JsonPropertyName("onPublish")]
    public Change onPublish { get; set; }
}

public class onPublishResult
{
    [JsonPropertyName("onPublish")]
    public onPublishData data { get; set; }
}

反序列化代码:

string appSyncJson = @"你的JSON字符串";
onPublishResult result = System.Text.Json.JsonSerializer.Deserialize<onPublishResult>(appSyncJson);

方案二:通过临时类手动转换

如果不想修改原有类的结构,可以定义一个和JSON结构完全匹配的临时类,反序列化后再手动映射到onPublishResult对象:

// 临时类,完全匹配返回的JSON结构
public class TempAppSyncResponse
{
    public Change onPublish { get; set; }
}

// 反序列化并转换
string appSyncJson = @"你的JSON字符串";
TempAppSyncResponse tempResponse = JsonConvert.DeserializeObject<TempAppSyncResponse>(appSyncJson);

onPublishResult finalResult = new onPublishResult
{
    data = new onPublishData
    {
        onPublish = tempResponse.onPublish
    }
};

内容的提问来源于stack exchange,提问作者user3097695

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 02:18:05