C# API的XML序列化
我的任务是编写一个库,该库序列化要传递给xml API和从xml 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>
<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()
{
}
}