Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/333.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.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# API的XML序列化_C#_.net_Xml_Serialization - Fatal编程技术网

C# API的XML序列化

C# API的XML序列化,c#,.net,xml,serialization,C#,.net,Xml,Serialization,我的任务是编写一个库,该库序列化要传递给xml API和从xml API传递来的数据。我以前从未使用过这种技术,现在有点挣扎。所有的请求都有许多重复的字段,所以我们考虑使用一个派生类来处理这个问题。xml看起来是这样的 <request> <UserId></UserId> <AccountId></AccountId> <Token></Token> <Method>

我的任务是编写一个库,该库序列化要传递给xml API和从xml API传递来的数据。我以前从未使用过这种技术,现在有点挣扎。所有的请求都有许多重复的字段,所以我们考虑使用一个派生类来处理这个问题。xml看起来是这样的

<request>
    <UserId></UserId>
    <AccountId></AccountId>
    <Token></Token>
    <Method>
        <methodName></methodName>
        <Id></Id>
        <Date></Date>
    </Method>
</request>
然后

public class Method : Request
{
    [XmlElement("methodName")]
    public string methodName { get; set; }         
    [XmlElement("Id")]
    public int Id { get; set; }
    [XmlElement("Date")]
    public string Date { get; set; }
}
我可以使用
XmlSerializer s=newxmlserializer(typeof(Method)),毫无问题地将其序列化;

但是它没有嵌套继承的类,我可以找出如何/在哪里添加xmlElement(“方法”)。 有人能帮我正确创建类吗

编辑
如果我从方法中删除继承并将方法作为请求类包含,我可以很好地完成这项工作-但是,由于我们将有大量不同的调用,我正试图使其成为一段很好的可重用代码

您需要此类结构来嵌套方法对象:

public class Request
{
    [XmlElement("token")]
    public string token { get; set; }
    [XmlElement("userId")]
    public int userId { get; set; }
    [XmlElement("accountId")]
    public int accountId { get; set; }
    [XmlElement("method")]
    public Method method { get; set; }
}
public class Method
{
    [XmlElement("methodName")]
    public string methodName { get; set; }
    [XmlElement("Id")]
    public int Id { get; set; }
    [XmlElement("Date")]
    public string Date { get; set; }
}
如果XML中有重复的方法对象列表,请更改此行

public Method method { get; set; }

公共列表方法{get;set;}

我就是这样让它工作的。它输出xml,如我的初始问题中所述。我确实学到了一些有趣的东西,比如不需要[serializable],不需要设置[XmlElement],除非我需要与属性不同的东西

public class Headers
    {
        public string Token { get; set; }
        public int UserId { get; set; }
        public int AccountId { get; set; }
        [XmlIgnore]
        public Uri host { get; set; }
        public static string requestMethod = "POST";
    }
[XmlRoot("request")]
public class GetActivityDetailsByActivityId : Headers
    {
        public string responseType = "ResponseGetActivityDetailsByActivityId";
        public class MethodDetails
        {
            public string methodName = "GetActivityDetailsByActivityId";
            public int activtyId;
            public DateTime activityDate;

        }
        [XmlElement("Method")]
        public MethodDetails Method = new MethodDetails();

        public GetActivityDetailsByActivityId(int activityId, DateTime activityDate,Headers headers)
        {
            this.Method.activityDate = activityDate;
            this.Method.activtyId = activityId;

            this.AccountId = headers.AccountId;
            this.Token = headers.Token;
            this.UserId = headers.UserId;
            this.host = headers.host;

        }
        GetActivityDetailsByActivityId()
        {
        }
    }

看看这里类似的问题:为什么需要额外的“Method”元素?你的“方法”是一个“请求”。XML应该是
而且,您可能会发现跳过XML序列化更容易,只需使用LINQ to XML即可。嗨,John。不幸的是,它是一个第三方API。抱歉,这与您用来创建要发送到API的XML的技术有什么关系?你可以使用任何你想创建XML的技术。我认为这是很好的信息。我有一个合适的解决方案,我会在找到它时提出。谢谢。我期待着看到你的解决方案。
public List<Method> method { get; set; }
public class Headers
    {
        public string Token { get; set; }
        public int UserId { get; set; }
        public int AccountId { get; set; }
        [XmlIgnore]
        public Uri host { get; set; }
        public static string requestMethod = "POST";
    }
[XmlRoot("request")]
public class GetActivityDetailsByActivityId : Headers
    {
        public string responseType = "ResponseGetActivityDetailsByActivityId";
        public class MethodDetails
        {
            public string methodName = "GetActivityDetailsByActivityId";
            public int activtyId;
            public DateTime activityDate;

        }
        [XmlElement("Method")]
        public MethodDetails Method = new MethodDetails();

        public GetActivityDetailsByActivityId(int activityId, DateTime activityDate,Headers headers)
        {
            this.Method.activityDate = activityDate;
            this.Method.activtyId = activityId;

            this.AccountId = headers.AccountId;
            this.Token = headers.Token;
            this.UserId = headers.UserId;
            this.host = headers.host;

        }
        GetActivityDetailsByActivityId()
        {
        }
    }