gpt4 book ai didi

c# - DataContract 不会反序列化 Id DataMember

转载 作者:行者123 更新时间:2023-11-30 20:35:47 27 4
gpt4 key购买 nike

当使用 DataContract 序列化程序时,它无法反序列化 Id 值,如下例所示:

using System;
using System.Runtime.Serialization;
using System.Xml.Linq;

public class Program
{
private const string SAMPLE_VALIDATION_RESULT_XML = @" <ValidationResult>
<Message>The FooBar record has duplicate key values.</Message>
<Id>Microsoft.LightSwitch.EntityObject.DuplicateKey</Id>
<Target>http://localhost:55815/ApplicationData.svc/FooBar(0)</Target>
</ValidationResult>";

[DataContract(Name = "ValidationResult", Namespace = "")]
public class ValidationResult
{
[DataMember]
public string Message { get; set; }
[DataMember]
public string Id { get; set; }
[DataMember]
public string Target { get; set; }
}


public static void Main()
{
var doc = XDocument.Parse(SAMPLE_VALIDATION_RESULT_XML);
using (var reader = doc.CreateReader())
{
reader.MoveToContent();
var res = (new DataContractSerializer(typeof(ValidationResult))).ReadObject(reader) as ValidationResult;
Console.WriteLine($"res.Id = \"{res.Id}\", expected \"Microsoft.LightSwitch.EntityObject.DuplicateKey\"");
}
}
}

我猜这与引用完整性功能有关,但我只找到了一个禁用它的选项(在 DataContractSerializer 上),它不会影响结果。

我无法更改 Id 字段的名称,因为它是第三方 API,那么我如何访问该值?

最佳答案

指定成员顺序

[DataContract(Name = "ValidationResult", Namespace = "")]
public class ValidationResult
{
[DataMember(Order = 0)]
public string Message { get; set; }
[DataMember(Order = 1)]
public string Id { get; set; }
[DataMember(Order = 2)]
public string Target { get; set; }
}

在不指定顺序的情况下,DataContractSerializer 期望成员按字母顺序排列。参见 Basic rules .很明显,订单是由服务提供商建立的。所以你必须指定它。

关于c# - DataContract 不会反序列化 Id DataMember,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37606262/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com