Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/267.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# AWS S3序列化策略文档_C#_Serialization_Amazon Web Services_Amazon S3 - Fatal编程技术网

C# AWS S3序列化策略文档

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

我正在尝试序列化策略文档,以便开始使用AmazonWebServicesS3存储

描述策略文档的以下格式:

{"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", "" });