简体   繁体   English

使用 Refit,如何调试反序列化错误?

[英]Using Refit, how to debug deserialization error?

I'm using Refit to consume an XML ReST Web Api.我正在使用Refit来消耗 XML ReST Web Z72664DC0959F3B0C04891F8C0ZA. There is some issue with XML deserialization into POCOs (which are annotated with attributes from System.Xml.Serialization ) since I get a NullReferenceException in Refit.RequestBuilderImplementation.DeserializeContentAsync . XML 反序列化为 POCO(使用System.Xml.Serialization的属性注释)存在一些问题,因为我在Refit.RequestBuilderImplementation.DeserializeContentAsync中收到NullReferenceException

However, I a no further information on how to debug the issue, since the exception message tells me nothing on what attribute or object in the response is not adapted to my POCOs.但是,我没有关于如何调试问题的更多信息,因为异常消息没有告诉我响应中的哪些属性或 object 不适合我的 POCO。

The XMl is: XMl 是:

<?xml version="1.0" encoding="utf-16"?>
<MediaContainer friendlyName="myPlex" identifier="com.plexapp.plugins.myplex" machineIdentifier="c62be90a37d43ecd9596be8abd98a2e485979e31" size="2">
   <Server accessToken="plexauthtoken" name="VOSTOK" address="ip address" port="1" version="1.23.0.4497-a1b1f3c10" scheme="http" host="ip address" localAddresses="ipaddress1,ipaddress2" machineIdentifier="machineid" createdAt="1590584258" updatedAt="1621708154" owned="1" synced="0" />
</MediaContainer>

Net library doesn't like "utf-16". Net 库不喜欢“utf-16”。 Solution is to skip first line of xml like this:解决方案是跳过 xml 的第一行,如下所示:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Xml;
using System.Xml.Serialization;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            string xml = "<?xml version=\"1.0\" encoding=\"utf-16\"?>\n<MediaContainer>\n</MediaContainer>";
            StringReader sReader = new StringReader(xml);
            sReader.ReadLine();
            XmlReader xReader = XmlReader.Create(sReader);
            XmlSerializer serializer = new XmlSerializer(typeof(MediaContainer));
            MediaContainer MediaContainer = (MediaContainer)serializer.Deserialize(xReader); 
        }
    }
    public class MediaContainer
    {
    }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM