다음과 같은 xml 파일을 역 직렬화하려고합니다.
<?xml version="1.0"?>
<Test xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/ConsoleApplication6">
<values>
<String>Value 1</String>
<String>Value 2</String>
</values>
</Test>
이 객체에
[DataContract(Namespace = "http://schemas.datacontract.org/2004/07/ConsoleApplication6")]
public class Test
{
[DataMember(Name = "values")]
public String[] values;
}
와
var ds = new DataContractSerializer(typeof(Test));
using (Stream stream1 = File.OpenRead(@"C:\Projects\test1.xml"))
{
Test rr = (Test)ds.ReadObject(stream1);
}
그러나 어떤 값도 역 직렬화되지 않습니다. 테스트 rr에서 배열을보고 비 웁니다. 내가 뭘 잘못하고 있는지 말씀해 주시겠습니까? 미리 감사드립니다.
직렬화 할 때 생성되는 XML을 세밀하게 제어해야하는 경우 DataContractSerializer
. 유연성이 매우 제한적입니다. 제한이있는을 사용 XmlSerializer
하는 것이 좋지만 DataContractSerializer
.
즉, .NET으로 원하는 작업을 수행 할 수있는 방법은 다음과 같습니다 DataContractSerializer
.
xml의 기본 네임 스페이스를 기본적으로 사용하는 네임 스페이스를 사용하도록 변경하십시오 DataContractSerializer
.
<?xml version="1.0"?>
<Test xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/">
<values>
<String>Value 1</String>
<String>Value 2</String>
</values>
</Test>
사용하는 대신 string[]
그 도출에서 사용자 정의 유형을 작성 List<string>
. 이것은 매달릴 무언가를 가질 목적으로 만 수행되어야합니다 CollectionDataContractAttribute
. CollectionDataContractAttribute
내부 요소의 이름을 지정할 수 있습니다 <values>
.
[DataContract]
public class Test
{
[DataMember(Name = "values")]
public TestValues values;
}
[CollectionDataContract(ItemName = "String")]
public class TestValues : List<string> { }
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다