Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 4.0 使用ServiceStack.Text时无法匹配旧版序列化XML_C# 4.0_<img Src="//i.stack.imgur.com/WM7S8.png" Height="16" Width="18" Alt="" Class="sponsor Tag Img">servicestack Text - Fatal编程技术网 servicestack-text,C# 4.0,servicestack Text" /> servicestack-text,C# 4.0,servicestack Text" />

C# 4.0 使用ServiceStack.Text时无法匹配旧版序列化XML

C# 4.0 使用ServiceStack.Text时无法匹配旧版序列化XML,c#-4.0,servicestack-text,C# 4.0,servicestack Text,下面是一个遗留消息类,它具有所有XML属性以及使用内置.NET序列化程序生成的输出: [Serializable] [XmlRoot(Namespace = http://www.tibco.com/schemas/TestTcpServer/Schemas/Schema.xsd", ElementName = "message", IsNullable = true)] public class MessageModel { [XmlElemen

下面是一个遗留消息类,它具有所有XML属性以及使用内置.NET序列化程序生成的输出:

    [Serializable]
    [XmlRoot(Namespace = http://www.tibco.com/schemas/TestTcpServer/Schemas/Schema.xsd", ElementName = "message", IsNullable = true)]
    public class MessageModel
    {
        [XmlElement(ElementName = "type")]
        public string ShipmentType { get; set; }

        [XmlElement(ElementName = "version")]
        public int? Version { get; set; }

        [XmlElement(ElementName = "id")]
        public string ID { get; set; }

        [XmlElement(ElementName = "message-id")]
        public string MessageID { get; set; }

        [XmlElement(ElementName = "date")]
        public string Date { get; set; }

        [XmlElement(ElementName = "payload")]
        public string Payload { get; set; }

        [XmlElement(ElementName = "ip-address")]
        public string IpAddress { get; set; }
    }
它生成以下XML

<?xml version="1.0" encoding="utf-8"?>
<q1:message xmlns:q1="http://www.tibco.com/schemas/TestTcpServer/Schemas/Schema.xsd">
  <q1:type>Test</q1:type>
  <q1:version d2p1:nil="true" xmlns:d2p1="http://www.w3.org/2001/XMLSchema-instance" />
  <q1:id>9976</q1:id>
  <q1:message-id>1</q1:message-id>
  <q1:date>2/22/2017 4:50:01 PM</q1:date>
  <q1:payload>Test Payload</q1:payload>
  <q1:ip-address>192.168.1.1</q1:ip-address>
</q1:message>
它在使用ServiceStack.Text执行.ToXml()时生成以下XML

<?xml version="1.0" encoding="utf-8"?>
<message xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.tibco.com/schemas/TestTcpServer/Schemas/Schema.xsd">
    <date>2/22/2017 4:50:01 PM</date>
    <id>9976</id>
    <ip-address>192.168.1.1</ip-address>
    <message-id>1</message-id>
    <payload>Test Payload</payload>
    <type>Test</type>
    <version i:nil="true" />
</message>

2017年2月22日下午4:50:01
9976
192.168.1.1
1.
测试有效载荷
试验
首先,添加了额外的名称空间,我可以手动删除它。然而,我不知道原始元素中每个元素前面的“q1:”是从哪里来的


是否有任何配置可以更改以使ServiceStack生成完全相同的XML消息?

ServiceStack使用.NET Framework的内置XML,其中可通过
[DataContract]
[DataMember]进行有限定制
属性和,您可以在其中为不同的C#命名空间设置全局命名空间

尽管如此,这两个XML文档在语义上是相同的。
q1
是一个自动生成的名称空间别名,表示前缀为
q1:
的每个元素或属性都来自引用的
架构。xsd

<q1:message xmlns:q1="http://www.tibco.com/schemas/TestTcpServer/Schemas/Schema.xsd">
<message xmlns="http://www.tibco.com/schemas/TestTcpServer/Schemas/Schema.xsd">
因此,它们在语义上应该是等价的,但是如果您的客户机希望使用完全相同的XML,那么我会使用完全相同的模型和序列化程序,只返回生成的XML,例如:

[AddHeader(ContentType = "text/xml")]
public object Any(MyRequest request)
{
    var response = ...;
    var xml = XmlSerializer.SerializeToString(response);
    return xml;
}

ServiceStack使用.NET Framework的内置XML,其中可通过
[DataContract]
[DataMember]
属性进行有限的定制,并且可以为不同的C#命名空间设置全局命名空间

尽管如此,这两个XML文档在语义上是相同的。
q1
是一个自动生成的名称空间别名,表示前缀为
q1:
的每个元素或属性都来自引用的
架构。xsd

<q1:message xmlns:q1="http://www.tibco.com/schemas/TestTcpServer/Schemas/Schema.xsd">
<message xmlns="http://www.tibco.com/schemas/TestTcpServer/Schemas/Schema.xsd">
因此,它们在语义上应该是等价的,但是如果您的客户机希望使用完全相同的XML,那么我会使用完全相同的模型和序列化程序,只返回生成的XML,例如:

[AddHeader(ContentType = "text/xml")]
public object Any(MyRequest request)
{
    var response = ...;
    var xml = XmlSerializer.SerializeToString(response);
    return xml;
}