c# - 使用奇怪的 namespace 序列化 XML?

标签 c# xml vb.net serialization xml-serialization

问题:这个 XML 内容的序列化类看起来如何?

<?xml version="1.0" encoding="utf-8"?>
<vcc:CreateTextSearchResponse xmlns:vcc="urn:veloconnect:catalog-1.1" xmlns:vct="urn:veloconnect:transaction-1.0">
  <vct:BuyersID>12345</vct:BuyersID>
  <vct:ResponseCode>200</vct:ResponseCode>
  <vct:TransactionID>225</vct:TransactionID>
  <vct:StatusCode>2</vct:StatusCode>
  <vct:IsTest>false</vct:IsTest>
  <vcc:TotalCount>3876</vcc:TotalCount>
</vcc:CreateTextSearchResponse>

如果我让它通过 xsd.exe 运行,它会生成错误。

我生成这个没有问题:

<?xml version="1.0" encoding="utf-8"?>
<CreateTextSearchResponse>
  <BuyersID>15942</BuyersID>
  <ResponseCode>200</ResponseCode>
  <TransactionID>225</TransactionID>
  <StatusCode>2</StatusCode>
  <IsTest>false</IsTest>
  <TotalCount>3876</TotalCount>
</CreateTextSearchResponse>

只是我需要那些 namespace 来反序列化它(然后再重新序列化),所以我不能就这样离开它(第 3 方网络服务需要它)...

最佳答案

像这样:

[XmlRoot(Namespace = CreateTextSearchResponse.CatalogNamespace)]
public class CreateTextSearchResponse
{
    public const string CatalogNamespace = "urn:veloconnect:catalog-1.1",
                TransactionNamespace = "urn:veloconnect:transaction-1.0";
    [XmlElement(Namespace=TransactionNamespace)]
    public int BuyersId { get; set; }
    [XmlElement(Namespace = TransactionNamespace)]
    public int ResponseCode { get; set; }
    [XmlElement(Namespace = TransactionNamespace)]
    public int TransactionID { get; set; }
    [XmlElement(Namespace = TransactionNamespace)]
    public int StatusCode { get; set; }
    [XmlElement(Namespace = TransactionNamespace)]
    public bool IsTest { get; set; }
    [XmlElement(Namespace = CatalogNamespace)]
    public int TotalCount { get; set; }
}

public static void Main()
{
    var ser = new XmlSerializer(typeof(CreateTextSearchResponse));
    var obj = new CreateTextSearchResponse
    {
        BuyersId = 12345,
        ResponseCode = 200,
        TransactionID = 225,
        StatusCode = 2,
        IsTest = false,
        TotalCount = 3876
    };
    XmlSerializerNamespaces ns = new XmlSerializerNamespaces();
    ns.Add("vcc", CreateTextSearchResponse.CatalogNamespace);
    ns.Add("vct", CreateTextSearchResponse.TransactionNamespace);
    ser.Serialize(Console.Out, obj, ns);
}

关于c# - 使用奇怪的 namespace 序列化 XML?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6692274/

相关文章:

iPhone 转义字符串不起作用

asp.net - 从 WCF 服务在服务器端 Access 数据库中运行 VBA 函数

c# - While 语句 - 键入击键后控制台输出奇怪

C# - 具有接口(interface)类型列表的相等运算符未按预期工作

javascript - 处理服务器 XML 响应

c# - 移除用于生产的 InternalsVisibleTo

vb.net - CPCL 语言的斑马条码打印示例

c# - 我可以摆脱这个可怕的阻止代码吗?

c# - 如何动态添加 ToolStripMenuItems

java - 如何删除重复的 XML 声明