我正在尝试使用 xml 包将 c# XmlSerializer 导出的 xml 文件导入到 dart 对象\n但我所有的导入尝试都失败了。
\n<?xml version="1.0" encoding="utf-8"?>\n<ArrayOfViewReads xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">\n <ViewReads>\n <CounterAccount>7e7386db-ae4e-47f8-a473-8a5534b8b421</CounterAccount>\n <ParentCounter>00000000-0000-0000-0000-000000000000</ParentCounter>\n <CounterGuid>88165f87-113b-4503-bd95-01cfc778cf0e</CounterGuid>\n <CounterID>354</CounterID>\n <AccountName>\xd9\x8a\xd8\xad\xd9\x8a \xd8\xa7\xd9\x84\xd8\xb9\xd8\xa7\xd9\x85\xd8\xb1</AccountName>\n <AreaName>\xd9\x85\xd8\xb1\xd8\xa8\xd8\xb9 \xd8\xa7\xd9\x84\xd8\xb4\xd8\xa7\xd8\xb1\xd8\xb9 \xd8\xa7\xd9\x84\xd8\xb9\xd8\xa7\xd9\x85 \xd9\x88\xd8\xba\xd8\xb2\xd9\x87</AreaName>\n <AddressDesc>\xd9\x85\xd9\x86\xd8\xb7\xd9\x82\xd9\x87 \xd8\xa7\xd9\x84\xd9\x88\xd8\xa1 \xd8\xa7\xd9\x84\xd8\xa7\xd8\xae\xd8\xb6\xd8\xb1</AddressDesc>\n <Phone>771707009</Phone>\n <FazName>\xd8\xb3\xd9\x86\xd8\xac\xd9\x84 \xd9\x81\xd8\xa7\xd8\xb2</FazName>\n <Balance>865.0000</Balance>\n <LastRead>7332.00</LastRead>\n </ViewReads>\n <ViewReads>\n <CounterAccount>46e2bacc-644f-47fb-abe7-6589f880667e</CounterAccount>\n <ParentCounter>00000000-0000-0000-0000-000000000000</ParentCounter>\n <CounterGuid>2d2f1a40-9dcf-4a3c-9fd2-081d3be83aaa</CounterGuid>\n <CounterID>2052</CounterID>\n <AccountName>\xd9\x83\xd9\x85\xd8\xa7\xd9\x84 \xd9\x85\xd8\xad\xd9\x85\xd8\xaf \xd8\xb9\xd9\x84\xd9\x8a \xd8\xab\xd8\xa7\xd9\x85\xd8\xb1</AccountName>\n <AreaName>\xd9\x85\xd8\xb1\xd8\xa8\xd8\xb9 \xd8\xa7\xd9\x84\xd8\xb4\xd8\xa7\xd8\xb1\xd8\xb9 \xd8\xa7\xd9\x84\xd8\xb9\xd8\xa7\xd9\x85 \xd9\x88\xd8\xba\xd8\xb2\xd9\x87</AreaName>\n <AddressDesc>\xd8\xae\xd9\x84\xd9\x81 \xd9\x83\xd9\x88\xd8\xa7\xd9\x81\xd9\x8a\xd8\xb1 \xd8\xa7\xd9\x84\xd8\xb3\xd9\x84\xd8\xb7\xd8\xa7\xd9\x86\xd9\x87</AddressDesc>\n <Phone>771363922</Phone>\n <FazName>\xd8\xb3\xd9\x86\xd8\xac\xd9\x84 \xd9\x81\xd8\xa7\xd8\xb2</FazName>\n <Balance>1560.0000</Balance>\n <LastRead>84.00</LastRead>\n <UserGuid>00000000-0000-0000-0000-000000000000</UserGuid>\n </ViewReads>\n</ArrayOfViewReads>\nRun Code Online (Sandbox Code Playgroud)\n这是我使用 VSCode 生成的 fromJson() 方法从 dart 导入代码:
\n final file = File('C:\\\\Users\\\\SALMAN\\\\Desktop\\\\2021_1_19_559.xml');\n final document = XmlDocument.parse(file.readAsStringSync());\n\n document.children.forEach((e) {\n var v = ViewRead.fromJson(e.toString());\n });\nRun Code Online (Sandbox Code Playgroud)\n这是我尝试运行代码后的错误:
\nUnhandled exception:\nFormatException: Unexpected character (at character 1)\n<?xml version="1.0" encoding="utf-8"?>\n^\n\n#0 _ChunkedJsonParser.fail (dart:convert-patch/convert_patch.dart:1404:5)\n#1 _ChunkedJsonParser.parseNumber (dart:convert-patch/convert_patch.dart:1271:9)\n#2 _ChunkedJsonParser.parse (dart:convert-patch/convert_patch.dart:936:22)\n#3 _parseJson (dart:convert-patch/convert_patch.dart:40:10)\n#4 JsonDecoder.convert (dart:convert/json.dart:505:36)\n#5 JsonCodec.decode (dart:convert/json.dart:156:41)\n#6 new ViewRead.fromJson (file:///C:/Users/SALMAN/.IntelliJIdea2019.1/dart/bin/dart.dart:170:70)\n#7 main.<anonymous closure> (file:///C:/Users/SALMAN/.IntelliJIdea2019.1/dart/bin/dart.dart:16:22)\n#8 List.forEach (dart:core-patch/growable_array.dart:313:8)\n#9 _DelegatingIterableBase.forEach (package:collection/src/wrappers.dart:52:45)\n#10 main (file:///C:/Users/SALMAN/.IntelliJIdea2019.1/dart/bin/dart.dart:15:21)\n#11 _startIsolate.<anonymous closure> (dart:isolate-patch/isolate_patch.dart:299:32)\n#12 _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:168:12)\n\nRun Code Online (Sandbox Code Playgroud)\n
以下是如何使用以下包解析此 XML 的示例xml:https://pub.dev/packages/xml
import \'package:xml/xml.dart\';\n\nconst xml = \'\'\'\n<?xml version="1.0" encoding="utf-8"?>\n<ArrayOfViewReads xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">\n <ViewReads>\n <CounterAccount>7e7386db-ae4e-47f8-a473-8a5534b8b421</CounterAccount>\n <ParentCounter>00000000-0000-0000-0000-000000000000</ParentCounter>\n <CounterGuid>88165f87-113b-4503-bd95-01cfc778cf0e</CounterGuid>\n <CounterID>354</CounterID>\n <AccountName>\xd9\x8a\xd8\xad\xd9\x8a \xd8\xa7\xd9\x84\xd8\xb9\xd8\xa7\xd9\x85\xd8\xb1</AccountName>\n <AreaName>\xd9\x85\xd8\xb1\xd8\xa8\xd8\xb9 \xd8\xa7\xd9\x84\xd8\xb4\xd8\xa7\xd8\xb1\xd8\xb9 \xd8\xa7\xd9\x84\xd8\xb9\xd8\xa7\xd9\x85 \xd9\x88\xd8\xba\xd8\xb2\xd9\x87</AreaName>\n <AddressDesc>\xd9\x85\xd9\x86\xd8\xb7\xd9\x82\xd9\x87 \xd8\xa7\xd9\x84\xd9\x88\xd8\xa1 \xd8\xa7\xd9\x84\xd8\xa7\xd8\xae\xd8\xb6\xd8\xb1</AddressDesc>\n <Phone>771707009</Phone>\n <FazName>\xd8\xb3\xd9\x86\xd8\xac\xd9\x84 \xd9\x81\xd8\xa7\xd8\xb2</FazName>\n <Balance>865.0000</Balance>\n <LastRead>7332.00</LastRead>\n </ViewReads>\n <ViewReads>\n <CounterAccount>46e2bacc-644f-47fb-abe7-6589f880667e</CounterAccount>\n <ParentCounter>00000000-0000-0000-0000-000000000000</ParentCounter>\n <CounterGuid>2d2f1a40-9dcf-4a3c-9fd2-081d3be83aaa</CounterGuid>\n <CounterID>2052</CounterID>\n <AccountName>\xd9\x83\xd9\x85\xd8\xa7\xd9\x84 \xd9\x85\xd8\xad\xd9\x85\xd8\xaf \xd8\xb9\xd9\x84\xd9\x8a \xd8\xab\xd8\xa7\xd9\x85\xd8\xb1</AccountName>\n <AreaName>\xd9\x85\xd8\xb1\xd8\xa8\xd8\xb9 \xd8\xa7\xd9\x84\xd8\xb4\xd8\xa7\xd8\xb1\xd8\xb9 \xd8\xa7\xd9\x84\xd8\xb9\xd8\xa7\xd9\x85 \xd9\x88\xd8\xba\xd8\xb2\xd9\x87</AreaName>\n <AddressDesc>\xd8\xae\xd9\x84\xd9\x81 \xd9\x83\xd9\x88\xd8\xa7\xd9\x81\xd9\x8a\xd8\xb1 \xd8\xa7\xd9\x84\xd8\xb3\xd9\x84\xd8\xb7\xd8\xa7\xd9\x86\xd9\x87</AddressDesc>\n <Phone>771363922</Phone>\n <FazName>\xd8\xb3\xd9\x86\xd8\xac\xd9\x84 \xd9\x81\xd8\xa7\xd8\xb2</FazName>\n <Balance>1560.0000</Balance>\n <LastRead>84.00</LastRead>\n <UserGuid>00000000-0000-0000-0000-000000000000</UserGuid>\n </ViewReads>\n</ArrayOfViewReads>\n\'\'\';\n\nclass ViewReads {\n final String counterAccount;\n final String parentCounter;\n final String counterGuid;\n final int counterID;\n final String accountName;\n final String areaName;\n final String addressDesc;\n final String phone;\n final String fazName;\n final double balance;\n final double lastRead;\n final String userGuid;\n\n ViewReads(\n this.counterAccount,\n this.parentCounter,\n this.counterGuid,\n this.counterID,\n this.accountName,\n this.areaName,\n this.addressDesc,\n this.phone,\n this.fazName,\n this.balance,\n this.lastRead,\n this.userGuid);\n\n factory ViewReads.fromXmlElement(XmlElement xmlElement) => ViewReads(\n xmlElement.findElements(\'CounterAccount\').single.text,\n xmlElement.findElements(\'ParentCounter\').single.text,\n xmlElement.findElements(\'CounterGuid\').single.text,\n int.parse(xmlElement.findElements(\'CounterID\').single.text),\n xmlElement.findElements(\'AccountName\').single.text,\n xmlElement.findElements(\'AreaName\').single.text,\n xmlElement.findElements(\'AddressDesc\').single.text,\n xmlElement.findElements(\'Phone\').single.text,\n xmlElement.findElements(\'FazName\').single.text,\n double.parse(xmlElement.findElements(\'Balance\').single.text),\n double.parse(xmlElement.findElements(\'LastRead\').single.text),\n _firstTextOrNull(xmlElement.findElements(\'UserGuid\')));\n\n static String _firstTextOrNull(Iterable<XmlElement> xmlElements) =>\n xmlElements.isEmpty ? null : xmlElements.single.text;\n\n @override\n String toString() {\n return \'ViewReads{counterAccount: $counterAccount, \'\n \'parentCounter: $parentCounter, \'\n \'counterGuid: $counterGuid, \'\n \'counterID: $counterID, \'\n \'accountName: $accountName, \'\n \'areaName: $areaName, \'\n \'addressDesc: $addressDesc, \'\n \'phone: $phone, \'\n \'fazName: $fazName, \'\n \'balance: $balance, \'\n \'lastRead: $lastRead, \'\n \'userGuid: $userGuid}\';\n }\n}\n\nvoid main() {\n final document = XmlDocument.parse(xml);\n\n final listOfViewReads = document\n .findAllElements(\'ViewReads\')\n .map((xmlElement) => ViewReads.fromXmlElement(xmlElement))\n .toList();\n\n listOfViewReads.forEach(print);\n // ViewReads{counterAccount: 7e7386db-ae4e-47f8-a473-8a5534b8b421, parentCounter: 00000000-0000-0000-0000-000000000000, counterGuid: 88165f87-113b-4503-bd95-01cfc778cf0e, counterID: 354, accountName: \xd9\x8a\xd8\xad\xd9\x8a \xd8\xa7\xd9\x84\xd8\xb9\xd8\xa7\xd9\x85\xd8\xb1, areaName: \xd9\x85\xd8\xb1\xd8\xa8\xd8\xb9 \xd8\xa7\xd9\x84\xd8\xb4\xd8\xa7\xd8\xb1\xd8\xb9 \xd8\xa7\xd9\x84\xd8\xb9\xd8\xa7\xd9\x85 \xd9\x88\xd8\xba\xd8\xb2\xd9\x87, addressDesc: \xd9\x85\xd9\x86\xd8\xb7\xd9\x82\xd9\x87 \xd8\xa7\xd9\x84\xd9\x88\xd8\xa1 \xd8\xa7\xd9\x84\xd8\xa7\xd8\xae\xd8\xb6\xd8\xb1, phone: 771707009, fazName: \xd8\xb3\xd9\x86\xd8\xac\xd9\x84 \xd9\x81\xd8\xa7\xd8\xb2, balance: 865.0, lastRead: 7332.0, userGuid: null}\n // ViewReads{counterAccount: 46e2bacc-644f-47fb-abe7-6589f880667e, parentCounter: 00000000-0000-0000-0000-000000000000, counterGuid: 2d2f1a40-9dcf-4a3c-9fd2-081d3be83aaa, counterID: 2052, accountName: \xd9\x83\xd9\x85\xd8\xa7\xd9\x84 \xd9\x85\xd8\xad\xd9\x85\xd8\xaf \xd8\xb9\xd9\x84\xd9\x8a \xd8\xab\xd8\xa7\xd9\x85\xd8\xb1, areaName: \xd9\x85\xd8\xb1\xd8\xa8\xd8\xb9 \xd8\xa7\xd9\x84\xd8\xb4\xd8\xa7\xd8\xb1\xd8\xb9 \xd8\xa7\xd9\x84\xd8\xb9\xd8\xa7\xd9\x85 \xd9\x88\xd8\xba\xd8\xb2\xd9\x87, addressDesc: \xd8\xae\xd9\x84\xd9\x81 \xd9\x83\xd9\x88\xd8\xa7\xd9\x81\xd9\x8a\xd8\xb1 \xd8\xa7\xd9\x84\xd8\xb3\xd9\x84\xd8\xb7\xd8\xa7\xd9\x86\xd9\x87, phone: 771363922, fazName: \xd8\xb3\xd9\x86\xd8\xac\xd9\x84 \xd9\x81\xd8\xa7\xd8\xb2, balance: 1560.0, lastRead: 84.0, userGuid: 00000000-0000-0000-0000-000000000000}\n}\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
2156 次 |
| 最近记录: |