ServiceStack.Text.XmlSerializer有什么问题?
我有对象:
public class weatherdata : IReturn<WashService>
{
public Location location { get; set; }
}
public class Location
{
public string name { get; set; }
public string country { get; set; }
}
尝试反序列化第三方xml:
var data = ServiceStack.Text.XmlSerializer.DeserializeFromString<weatherdata>("<weatherdata><location><name>Moscow</name><country>RU</country></location></weatherdata>");
data.location.name =莫斯科。 data.location.country为NULL;
像这样改变xml:
var data = ServiceStack.Text.XmlSerializer.DeserializeFromString<weatherdata>("<weatherdata><location><country>RU</country><name>Moscow</name></location></weatherdata>");
并查看
data.location.name == "Moscow".
data.location.country =="RU";
如果我只改变订单,为什么会有如此不同的结果?
答案 0 :(得分:2)
作为explained here,ServiceStack(.NET的DataContract序列化程序)使用的默认XML序列化程序假定XML元素的顺序必须与类中声明的顺序相同。在XML模式术语中,元素声明为xs:sequence
而不是xs:all
。如果您需要在请求中以任何可能的顺序支持XML元素,那么您可能需要覆盖ServiceStack使用的XML序列化程序,如上面的链接所述。
如果您只需要调整XML元素的顺序,我相信您可以通过使用DataMember
属性修饰属性并指定Order
属性来为元素指定确切的顺序。如果您这样做,那么您还需要使用DataContract
属性装饰Location
课程。