C# AWS S3序列化策略文档
我正在尝试序列化策略文档,以便开始使用AmazonWebServicesS3存储 描述策略文档的以下格式:C# AWS S3序列化策略文档,c#,serialization,amazon-web-services,amazon-s3,C#,Serialization,Amazon Web Services,Amazon S3,我正在尝试序列化策略文档,以便开始使用AmazonWebServicesS3存储 描述策略文档的以下格式: {"expiration": "2009-01-01T00:00:00Z", "conditions": [ {"bucket": "s3-bucket"}, ["starts-with", "$key", "uploads/"], {"acl": "private"}, {"success_action_redirect": "http://loc
{"expiration": "2009-01-01T00:00:00Z",
"conditions": [
{"bucket": "s3-bucket"},
["starts-with", "$key", "uploads/"],
{"acl": "private"},
{"success_action_redirect": "http://localhost/"},
["starts-with", "$Content-Type", ""],
["content-length-range", 0, 1048576]
]
}
如何在C#中序列化此文件?我尝试过创建这样的泛型类:
[DataContract]
public class S3PolicyDocument
{
[DataMember(Name = "expiration")]
public DateTime expiration { get; set; }
[DataMember(Name = "conditions")]
public List<object> conditions { get; set; }
public S3PolicyDocument()
{
conditions = new List<object>();
}
}
但是,我无法使用DataContractJsonSerializer
对其进行序列化。如何在C#中构建这个
或者只是将其粘贴为常量字符串,我无法正确格式化它。。。如果这是解决方案,我如何将其粘贴为字符串而不将所有内容放在一行上。。。也就是说,这不起作用:
string PolicyDoc = "{
\"expiration\": \"" + DateTime.Now.ToString() + "\",
\"conditions\": [
{\"bucket\": \"s3-bucket\"},
[\"starts-with\", \"$key\", \"uploads/\"],
{\"acl\": \"private\"},
{\"success_action_redirect\": \"http://baasdf/\"},
[\"starts-with\", \"$Content-Type\", \"\"],
[\"content-length-range\", 0, 1048576]
]
}";
事实证明,这些值都可以格式化为数组。因此,将类更改为下面的将起作用
[DataContract]
public class S3PolicyDocument
{
[DataMember(Name = "expiration")]
public string expiration { get; set; }
[DataMember(Name = "conditions")]
public List<string[]> conditions { get; set; }
public S3PolicyDocument()
{
conditions = new List<string[]>();
}
}
[DataContract]
public class S3PolicyDocument
{
[DataMember(Name = "expiration")]
public string expiration { get; set; }
[DataMember(Name = "conditions")]
public List<string[]> conditions { get; set; }
public S3PolicyDocument()
{
conditions = new List<string[]>();
}
}
S3PolicyDocument policyDoc = new S3PolicyDocument();
policyDoc.expiration = DateTime.Now.AddHours(1).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'");
policyDoc.conditions.Add(new string[] { "eq", "$bucket", "apples" });
policyDoc.conditions.Add(new string[] { "starts-with", "$key", "uploads/" });
policyDoc.conditions.Add(new string[] { "starts-with", "$acl", "private" });
policyDoc.conditions.Add(new string[] { "starts-with", "$success_action_redirect", "" });