C# XmlSerializer不包括非字符串元素
这来自WSDL文档: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=
<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"
};