반환 값이 XML 인 WCF를 만들려고합니다. xml 파일을 객체로 deserialize하려고 할 때 오류가 있습니다.
이것은 파일을 deserialize하는 내 코드
내 컨트롤러
//serialize request to wcf//
var requestXML = Lib.Serializer.ObjectSerializer.Serialize(request);
//get response from wcf//
var XMLResult = Lib.Net.Http.Post(requestXML,"http://localhost:53721/RoomRate.svc/RoomRates", 60);
//deserialize xml file to object//
var response = Lib.Serializer.ObjectSerializer.Deserialize<List<RoomRatesResponses>>(XMLResult);
XML deserialize에 대한 내 클래스
public static T Deserialize<T>(string xml)
{
T result;
XmlSerializer ser = new XmlSerializer(typeof(T));
using (TextReader tr = new StringReader(xml))
{
result = (T)ser.Deserialize(tr);
}
return result;
}
내 개체 모델
public class RoomRatesResponses
{
public List<RoomRateResponse> ListRoomRateResponse { get; set; }
public RoomRatesResponses()
{
ListRoomRateResponse = new List<RoomRateResponse>();
}
}
public class RoomRateResponse
{
public string ErrorMessage { get; set; }
public bool OperationSuccess { get; set; }
public int Allotment { get; set; }
public bool Breakfast { get; set; }
public DateTime CheckInDate { get; set; }
public bool CloseSelling { get; set; }
public double CommissionPct { get; set; }
public string CurrCode { get; set; }
public bool FreeSell { get; set; }
public int RoomRateId { get; set; }
public string RoomType { get; set; }
public double SingleRate { get; set; }
public double TripleRate { get; set; }
public double TwinDoubleRate { get; set; }
}
내 XML을 deserialize하면 다음과 같은 오류가 발생합니다.
<ArrayOfRoomRateResult xmlns=''>
예상되지 않았습니다. 설명 : 현재 웹 요청을 실행하는 동안 처리되지 않은 예외가 발생했습니다. 오류 및 코드에서 오류가 발생한 위치에 대한 자세한 내용은 스택 추적을 검토하십시오.예외 세부 정보 :
System.InvalidOperationException
:<ArrayOfRoomRateResult xmlns=''>
예상하지 못했습니다.
내 xml 파일을 어떻게 deseralize 할 수 있습니까 ??
<?xml version="1.0" encoding="utf-8"?>
<ArrayOfRoomRateResult xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<RoomRateResult>
<OperationSuccess>true</OperationSuccess>
<ErrorMessage/>
<RoomRateId>1170</RoomRateId>
<RoomType>superior</RoomType>
<RoomTypeID>150</RoomTypeID>
<Breakfast>true</Breakfast>
<CheckInDate>2014-01-01T00:00:00</CheckInDate>
<CurrCode>IDR</CurrCode>
<SingleRate>450000.0000</SingleRate>
<TwinDoubleRate>450000.0000</TwinDoubleRate>
<TripleRate>750000.0000</TripleRate>
<CommissionPct>15.00</CommissionPct>
<Allotment>25</Allotment>
<FreeSell>true</FreeSell>
<CloseSelling>false</CloseSelling>
<CancellationPolicy/>
</RoomRateResult>
<RoomRateResult>
<OperationSuccess>true</OperationSuccess>
<ErrorMessage/>
<RoomRateId>1171</RoomRateId>
<RoomType>superior</RoomType>
<RoomTypeID>150</RoomTypeID>
<Breakfast>true</Breakfast>
<CheckInDate>2014-01-02T00:00:00</CheckInDate>
<CurrCode>IDR</CurrCode>
<SingleRate>450000.0000</SingleRate>
<TwinDoubleRate>450000.0000</TwinDoubleRate>
<TripleRate>750000.0000</TripleRate>
<CommissionPct>15.00</CommissionPct>
<Allotment>22</Allotment>
<FreeSell>false</FreeSell>
<CloseSelling>false</CloseSelling>
<CancellationPolicy/>
</RoomRateResult>
<RoomRateResult>
<OperationSuccess>true</OperationSuccess>
<ErrorMessage/>
<RoomRateId>1177</RoomRateId>
<RoomType>deluxe</RoomType>
<RoomTypeID>151</RoomTypeID>
<Breakfast>false</Breakfast>
<CheckInDate>2014-01-01T00:00:00</CheckInDate>
<CurrCode>IDR</CurrCode>
<SingleRate>600000.0000</SingleRate>
<TwinDoubleRate>600000.0000</TwinDoubleRate>
<TripleRate>850000.0000</TripleRate>
<CommissionPct>25.00</CommissionPct>
<Allotment>11</Allotment>
<FreeSell>false</FreeSell>
<CloseSelling>false</CloseSelling>
<CancellationPolicy>
<Cancellation>
<CancellationPolicyID>34</CancellationPolicyID>
<ValidFrom>2014-01-01T00:00:00</ValidFrom>
<ValidTo>2014-01-31T00:00:00</ValidTo>
<ValidDays>YYYYYYY</ValidDays>
<ChargeTypeId>1</ChargeTypeId>
<CancellationCharge>1.0000</CancellationCharge>
<DayBeforeCheckIn>7</DayBeforeCheckIn>
</Cancellation>
</CancellationPolicy>
</RoomRateResult>
<RoomRateResult>
<OperationSuccess>true</OperationSuccess>
<ErrorMessage/>
<RoomRateId>1178</RoomRateId>
<RoomType>deluxe</RoomType>
<RoomTypeID>151</RoomTypeID>
<Breakfast>false</Breakfast>
<CheckInDate>2014-01-02T00:00:00</CheckInDate>
<CurrCode>IDR</CurrCode>
<SingleRate>500000.0000</SingleRate>
<TwinDoubleRate>500000.0000</TwinDoubleRate>
<TripleRate>750000.0000</TripleRate>
<CommissionPct>25.00</CommissionPct>
<Allotment>22</Allotment>
<FreeSell>false</FreeSell>
<CloseSelling>false</CloseSelling>
<CancellationPolicy>
<Cancellation>
<CancellationPolicyID>34</CancellationPolicyID>
<ValidFrom>2014-01-01T00:00:00</ValidFrom>
<ValidTo>2014-01-31T00:00:00</ValidTo>
<ValidDays>YYYYYYY</ValidDays>
<ChargeTypeId>1</ChargeTypeId>
<CancellationCharge>1.0000</CancellationCharge>
<DayBeforeCheckIn>7</DayBeforeCheckIn>
</Cancellation>
</CancellationPolicy>
</RoomRateResult>
</ArrayOfRoomRateResult>
다음은 문제를 해결하는 데 필요한 더미 코드입니다. 여기서 직렬화가 작동하는 방식을 보여줍니다. 역 직렬화를 위해 역 직렬화를 수행해야합니다. 클래스 및 변수 이름을 확인하십시오.
using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Threading;
using System.Xml.Serialization;
namespace Code.Without.IDE
{
//http://stackoverflow.com/questions/20697928/how-to-deserialize-xml-to-listobject
public class Dummy
{
private static void Main()
{
List<RoomRateResult> ArrayOfRoomRateResult = new List<RoomRateResult>();
RoomRateResult rs1 = new RoomRateResult
{
ErrorMessage = string.Empty,
OperationSuccess = true,
Allotment = 10,
Breakfast = true,
CheckInDate = DateTime.Now,
CloseSelling = false,
CommissionPct = 3.0d,
CurrCode = "USD",
FreeSell = true,
RoomRateId = 100,
RoomType = "Mega",
SingleRate = 95d,
TripleRate = 150d,
TwinDoubleRate = 150d
};
RoomRateResult rs2 = new RoomRateResult
{
ErrorMessage = string.Empty,
OperationSuccess = true,
Allotment = 12,
Breakfast = true,
CheckInDate = DateTime.Now,
CloseSelling = false,
CommissionPct = 2.0d,
CurrCode = "USD",
FreeSell = true,
RoomRateId = 110,
RoomType = "Mega",
SingleRate = 90d,
TripleRate = 140d,
TwinDoubleRate = 150d
};
ArrayOfRoomRateResult.Add(rs1);
ArrayOfRoomRateResult.Add(rs2);
XmlSerializer ser = new XmlSerializer(typeof(List<RoomRateResult>));
TextWriter writer = new StreamWriter("serl.xml");
ser.Serialize(writer, ArrayOfRoomRateResult);
writer.Flush();
writer.Close();
}
}
[Serializable]
public class RoomRateResult
{
public string ErrorMessage { get; set; }
public bool OperationSuccess { get; set; }
public int Allotment { get; set; }
public bool Breakfast { get; set; }
public DateTime CheckInDate { get; set; }
public bool CloseSelling { get; set; }
public double CommissionPct { get; set; }
public string CurrCode { get; set; }
public bool FreeSell { get; set; }
public int RoomRateId { get; set; }
public string RoomType { get; set; }
public double SingleRate { get; set; }
public double TripleRate { get; set; }
public double TwinDoubleRate { get; set; }
}
}
직렬화는 다음을 제공합니다.
<?xml version="1.0" encoding="utf-8"?>
<ArrayOfRoomRateResult xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<RoomRateResult>
<ErrorMessage />
<OperationSuccess>true</OperationSuccess>
<Allotment>10</Allotment>
<Breakfast>true</Breakfast>
<CheckInDate>2013-12-19T23:11:08.2340815-08:00</CheckInDate>
<CloseSelling>false</CloseSelling>
<CommissionPct>3</CommissionPct>
<CurrCode>USD</CurrCode>
<FreeSell>true</FreeSell>
<RoomRateId>100</RoomRateId>
<RoomType>Mega</RoomType>
<SingleRate>95</SingleRate>
<TripleRate>150</TripleRate>
<TwinDoubleRate>150</TwinDoubleRate>
</RoomRateResult>
<RoomRateResult>
<ErrorMessage />
<OperationSuccess>true</OperationSuccess>
<Allotment>12</Allotment>
<Breakfast>true</Breakfast>
<CheckInDate>2013-12-19T23:11:08.2380815-08:00</CheckInDate>
<CloseSelling>false</CloseSelling>
<CommissionPct>2</CommissionPct>
<CurrCode>USD</CurrCode>
<FreeSell>true</FreeSell>
<RoomRateId>110</RoomRateId>
<RoomType>Mega</RoomType>
<SingleRate>90</SingleRate>
<TripleRate>140</TripleRate>
<TwinDoubleRate>150</TwinDoubleRate>
</RoomRateResult>
</ArrayOfRoomRateResult>
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다