1

最近、プロジェクトをフレームワーク 2.0 からフレームワーク 4.5 に移行しました。Deserlize していくつかの操作を行う xml ファイルがあります。フレームワーク 2.0 が正常に動作していれば、xml の逆アセアライゼーションは問題ありません。しかし、コードを変更せずに同じ xml ファイルを使用すると、非シリアル化されない xml ファイルは「ルート レベルのデータが無効です。31 行目、27 番目の位置」というエラーが表示されます。私はこれのために30分を無駄にしました。ここに私のXMLファイルがあります

<SpreadResultData>
<SpreadToList>
<Spread>
<GroupName>A</GroupName>
<CellPos>B</CellPos>
<CellValue>0~</CellValue>
<Color>Green</Color>
<CellLinePos>3</CellLinePos>
<IsSetColor>true</IsSetColor>
<IsClear>false</IsClear>
</Spread>
<Spread>
<GroupName>B</GroupName>
<CellPos>C</CellPos>
<CellValue>0~</CellValue>
<Color>Yellow</Color>
<CellLinePos>3</CellLinePos>
<IsSetColor>true</IsSetColor>
<IsClear>false</IsClear>
</Spread>
<Spread>
<GroupName>C</GroupName>
<CellPos>D</CellPos>
<CellValue>0~</CellValue>
<Color>Red</Color>
<CellLinePos>3</CellLinePos>
<IsSetColor>true</IsSetColor>
<IsClear>false</IsClear>
</Spread>
</SpreadToList>
</SpreadResultData>
4

1 に答える 1

3

編集:生のファイルの内容がアップロードされると、問題がより明確になります。最後の 10 バイトを 16 進数で見ると、次のようになります。

6C-74-44-61-74-61-3E-EF-BB-BF

つまり:

l  t  D  a  t  a  >

ここで、最後の 3 バイトはゼロ幅のノーブレーク スペースです。

ファイルの末尾にある不良データを修正すると、ソートされるはずです。終了する必要があります:

6C-74-44-61-74-61-3E

再現できません。これは、投稿に従ってxmlファイルを使用して、.NET 4.5をターゲットにしている私にとってはうまく機能します。ファイルの後に他に何もないのですか?正確なファイルをどこかにアップロードできますか? SO のテキスト ダンプに表示されないコンテンツがある可能性があります。

static class Program
{
    static void Main()
    {
        var ser = new XmlSerializer(typeof(SpreadResultData));
        SpreadResultData data;
        using(var file = File.OpenRead("my.xml"))
        {
            data = (SpreadResultData)ser.Deserialize(file);
        }
    }
}

public class SpreadResultData
{
    public List<Spread> SpreadToList {get;set;}
}
public class Spread
{
    public string GroupName { get; set; }
    public string CellPos { get; set; }
    public string CellValue { get; set; }
    public string Color { get; set; }
    public int CellLinePos { get; set; }
    public bool IsSetColor { get; set; }
    public bool IsClear { get; set; }
}
于 2013-04-11T08:13:03.160 に答える