使用奇怪的命名空间序列化 XML? [英] Serializing XML with strange namespaces?

查看:28
本文介绍了使用奇怪的命名空间序列化 XML?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问题:用于序列化此 XML 内容的类看起来如何?

Question: How does the class for the serialization of this XML content look ?

<?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 运行,它会产生一个错误.

If I let it run through xsd.exe, it generates an error.

生成这个没有问题:

<?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>

只是我需要这些命名空间来反序列化它(以及稍后重新序列化),所以我不能就这样(第 3 方网络服务需要它)...

It's just that I need those namespaces to deserialize it (and later on reserialize), so I can't just leave it like this (it's needed by a 3rd party web-service)...

推荐答案

像这样:

[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);
}

这篇关于使用奇怪的命名空间序列化 XML?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆