c# - 需要 XML DataContract 反序列化帮助

标签 c# xml serialization collections datacontractserializer

我有以下 XML:

<?xml version="1.0" ?>
<Responses>
    <ResponseList>
      <Response type="XXX">
        <Foo>YYYY</Foo>
        <Bar>ZZZZ</Bar>
      </Response>
    </ResponseList>
</Responses>

我的类应该是什么样子,以便我可以将字符串反序列化为一个对象(我正在使用 DataContractSerializer)

[DataContract(Namespace = "")]
[Serializable]
public class Responses : DataContainer
{
    [DataMember]
    public ResponseCollection ResponseList { get; set; }
}

[Serializable]
public class Response : DataContainer 
{
    [DataMember]
    public string Foo { get; set; }
    [DataMember]
    public string Bar { get; set; }
}

[Serializable]
public class ResponseCollection : List<Response>
{
}

[编辑] 我实际上能够让它与 DataContractSerializer 一起工作......我的目标是利用 DataContractSerializer 将 XML 字符串(响应)反序列化为一个对象,并且我得到了两个属性(foo 和 bar)的 NULL。

[Serializable]
[DataContract(Namespace = "")]
public class Responses : DataContainer
{
    [DataMember(Name = "ResponseList")]
    public Response[] Response { get; set; }
}

[Serializable]
[DataContract(Namespace = "")]
public class Response : DataContainer
{
    [DataMember(Order = 0)]
    public string Foo { get; set; }
    [DataMember(Order = 1)]
    public string Bar { get; set; }
}

最佳答案

(这个答案早于澄清需要 DataContractSerializer 的编辑)

如果我正确理解这个例子,那么如下。注意:其他属性没有坏处,但没有被 XmlSerializer 使用 - 我只展示了 XmlSerializer 使用的属性。

[XmlRoot("Responses")]
public class TxTNotifyResponse : DataContainer
{
    [XmlArray("ResponseList")]
    [XmlArrayItem("Response")]
    public MsgResponseCollection MsgResponseList { get; set; }
}

public class MsgResponse : DataContainer 
{
    [XmlElement("Foo")]
    public string Status { get; set; }
    [XmlElement("Bar")]
    public string MessageId { get; set; }
}

public class MsgResponseCollection : List<MsgResponse>
{
}

如果这不起作用(而且我还没有测试过),请尝试使用单独的 DTO 模型。最简单的方法是将数据放入 XML 文件(比如 your.xml),然后使用(在命令提示符处):

xsd.exe your.xml
xsd.exe your.xsd /classes

哪个会写你的.cs

关于c# - 需要 XML DataContract 反序列化帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8673778/

相关文章:

c# - UnderlyingSystemType 何时与当前 Type 实例不同

c# - 如何在 ASP.NET Identity 中使用和使用 ASP.NET Membership 数据库?

python - 不打印 xpath 的空结果

java - Jibx - 如何使用值和属性解码/编码标签?

vb.net - 如何在不启动对象的情况下获取类的类型?

c# - 'stream.ReadTimeout' 抛出 'System.InvalidOperationException' 类型的异常,将照片发送到 Telegram Bot

c# - 使用动态类型作为它自己的基类型的参数

mysql - Mondrian - XML 形式的事实表数据

c# - UWP 等同于用于序列化 XAML 的 XamlWriter

java - 声纳 "Make transient or serializable"错误