我正在Visual Studio 2015 c#中构建一个WPF应用程序,并且需要能够从应用程序编辑配置文件
在应用程序中,我有一个带有一些文本框的TabItem,这些文本框由来自S3 Bucket的配置文件请求填充。
根据组合框中的选择更改事件填充文本框
这里的问题是能够编辑特定的行,每次我尝试用新数据覆盖整个配置而不是编辑当前数据。
这是我正在使用的JSON结构。
[
{
"ClientId": 23,
"EmailVersionId": "u74hdta58jmf",
"ClientName": "ClientName",
"emailTemplateConfigs": [
{
"emailTypeName": "EmailName",
"emailTypeId": 15,
"subject": "subject",
"fromAddress": "from address",
"headerFooterReplacements": [
{
"placeholder": "##HEADER_PHONENUMBER##",
"value": "0000 000 000"
},
{
"placeholder": "##HTML_TITLE##",
"value": "Title"
},
{
"placeholder": "##EMAIL_HEADING##",
"value": "Heading"
}
]
},
{
"emailTypeName": "EmailName",
"emailTypeId": 29,
"subject": "subject",
"fromAddress": "from address",
"headerFooterReplacements": [
{
"placeholder": "##HEADER_PHONENUMBER##",
"value": "0000 000 000"
},
{
"placeholder": "##HTML_TITLE##",
"value": "Title"
},
{
"placeholder": "##EMAIL_HEADING##",
"value": "Heading"
}
]
}
]
},
{
"ClientId": 33,
"EmailVersionId": "jcna53sj231h",
"ClientName": "ClientName",
"emailTemplateConfigs": [
{
"emailTypeName": "EmailName",
"emailTypeId": 12,
"subject": "subject",
"fromAddress": "from address",
"headerFooterReplacements": [
{
"placeholder": "##HEADER_PHONENUMBER##",
"value": "0000 000 000"
},
{
"placeholder": "##HTML_TITLE##",
"value": "Title"
},
{
"placeholder": "##EMAIL_HEADING##",
"value": "Heading"
}
]
},
{
"emailTypeName": "EmailName",
"emailTypeId": 49,
"subject": "subject",
"fromAddress": "from address",
"headerFooterReplacements": [
{
"placeholder": "##HEADER_PHONENUMBER##",
"value": "0000 000 000"
},
{
"placeholder": "##HTML_TITLE##",
"value": "Title"
},
{
"placeholder": "##EMAIL_HEADING##",
"value": "Heading"
}
]
}
]
}
]
我试图用文本框更新的部分是
"emailTypeName": "EmailName",
"emailTypeId": 15,
"subject": "subject",
"fromAddress": "from address",
但在进行编辑时,还需要使用客户端ID和电子邮件类型ID作为密钥将信息保存到正确的客户端和正确的模板。
GetObjectRequest requestconfig = new GetObjectRequest();
requestconfig.BucketName = "bucket";
requestconfig.Key = "key";
GetObjectResponse response = s3Client.GetObject(requestconfig);
using (StreamReader r = new StreamReader(response.ResponseStream))
{
string json = r.ReadToEnd();
dynamic jsonObj = JsonConvert.DeserializeObject(json);
if ((int)emailTempConfig.emailTypeId == templateID)
{
jsonObj["EmailTemplateConfig"][0]["EmailsTypeName"] = EmailNameText.Text;
output = JsonConvert.SerializeObject(jsonObj, Formatting.Indented);
}
}
PutObjectRequest requestConfig = new PutObjectRequest();
requestConfig.BucketName = "bucket";
requestConfig.Key = "key";
requestConfig.ContentType = "application/json";
requestConfig.ContentBody = output;
s3Client.PutObject(requestConfig);
这就是我在使用代码的地方。