Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.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# XmlSerializer不包括非字符串元素_C#_Xml_Serialization_Wsdl - Fatal编程技术网

C# XmlSerializer不包括非字符串元素

C# XmlSerializer不包括非字符串元素,c#,xml,serialization,wsdl,C#,Xml,Serialization,Wsdl,这来自WSDL文档: <s:complexType name="ResponseMsg"> <s:all> <s:element minOccurs="0" maxOccurs="1" name="Responsestatus" type="s:string" /> <s:element minOccurs="0" maxOccurs=

这来自WSDL文档:

<s:complexType name="ResponseMsg">
<s:all>
<s:element minOccurs="0" maxOccurs="1" name="Responsestatus" type="s:string" />
<s:element minOccurs="0" maxOccurs="1" name="CurBalance" type="s:double" />
<s:element minOccurs="0" maxOccurs="1" name="AvlBalance" type="s:double" />
<s:element minOccurs="1" maxOccurs="1" name="Acknowledgement" type="s:string" />
<s:element minOccurs="0" maxOccurs="1" name="LoadAmount" type="s:double" />
<s:element minOccurs="0" maxOccurs="1" name="Bill_Amt_Approved" type="s:double" />
<s:element minOccurs="0" maxOccurs="1" name="Update_Balance" type="s:int" />
<s:element minOccurs="0" maxOccurs="1" name="New_Balance_Sequence_Exthost" type="s:long" />
<s:element minOccurs="0" maxOccurs="1" name="CVV2_Result" type="s:string" /> <s:element minOccurs="0" maxOccurs="1" name="AvlBalance_GPS_STIP" type="s:double" /> <s:element minOccurs="0" maxOccurs="1" name="CurBalance_GPS_STIP" type="s:double" />
</s:all>
</s:complexType>
但是结果字符串是

<?xml version="1.0" encoding="utf-16"?>
<ResponseMsg>
  <Responsestatus xmlns="http://tempuri.org/">00</Responsestatus>
  <Acknowledgement xmlns="http://tempuri.org/">1</Acknowledgement>
  <CVV2_Result xmlns="http://tempuri.org/">test</CVV2_Result>
</ResponseMsg>

00
1.
测试
我设置值的其他字段在哪里?只显示字符串类型,缺少的是双精度


另外,如何去掉每个元素上的xmlns?

您是否看到以“Specified”结尾的属性?这些属性是存在的,因此可以区分“属性存在”和“属性缺失”两种情况。对于字符串属性,
!=null
==null

因此,对于非字符串属性,如果希望序列化值,则需要将…指定的属性设置为true:

var rtnAck = new ResponseMsg
{
    Responsestatus = "00",
    CurBalance = 0.5,
    CurBalanceSpecified = true,
    AvlBalance = 0.5,
    AvlBalanceSpecified = true, 
    Acknowledgement = "1",
    LoadAmount = 0.00,
    LoadAmountSpecified = true,
    CVV2_Result = "test"
};

这对用户不是很友好,但是XmlSerialization早于
Nullable

对于额外的问题,请参见此处:您有以下可以删除的属性:System.Xml.Serialization.XmlIgnoreAttribute()@jdweng XmlIgnoreAttribute是Visual Studio自动生成的代码的一部分(通过添加服务参考选项)那又怎么样!!!Microsoft tools没有做你想让它做的事情。我试图找到阻止不想要的结果的选项。我花了几个月(也许几年)试图阻止Microsoft tools做错误的事情。
var rtnAck = new ResponseMsg
{
    Responsestatus = "00",
    CurBalance = 0.5,
    AvlBalance = 0.5,
    Acknowledgement = "1",
    LoadAmount = 0.00,
    CVV2_Result = "test"
};

var rtnData = rtnAck.ObjectToXml();
<?xml version="1.0" encoding="utf-16"?>
<ResponseMsg>
  <Responsestatus xmlns="http://tempuri.org/">00</Responsestatus>
  <Acknowledgement xmlns="http://tempuri.org/">1</Acknowledgement>
  <CVV2_Result xmlns="http://tempuri.org/">test</CVV2_Result>
</ResponseMsg>
var rtnAck = new ResponseMsg
{
    Responsestatus = "00",
    CurBalance = 0.5,
    CurBalanceSpecified = true,
    AvlBalance = 0.5,
    AvlBalanceSpecified = true, 
    Acknowledgement = "1",
    LoadAmount = 0.00,
    LoadAmountSpecified = true,
    CVV2_Result = "test"
};