gpt4 book ai didi

.net - 通用 WCF JSON 反序列化

转载 作者:行者123 更新时间:2023-12-03 21:42:00 25 4
gpt4 key购买 nike

我对 WCF 有点陌生,将尝试清楚地描述我正在尝试做的事情。

我有一个使用 JSON 请求的 WCF web 服务。我在大部分情况下都可以很好地发送/接收 JSON。例如,以下代码运行良好且符合预期。

JSON 发送:

{ "guy": {"FirstName":"Dave"} }

周转基金:
    [DataContract]
public class SomeGuy
{
[DataMember]
public string FirstName { get; set; }
}

[OperationContract]
[WebInvoke(Method = "POST",
BodyStyle = WebMessageBodyStyle.WrappedRequest,
RequestFormat = WebMessageFormat.Json,
ResponseFormat = WebMessageFormat.Json)]
public string Register(SomeGuy guy)
{
return guy.FirstName;
}

这将按预期返回一个带有“Dave”的 JSON 对象。问题是我不能总是保证我收到的 JSON 与我的 DataContract 中的成员完全匹配。例如,JSON:
{ "guy": {"firstname":"Dave"} }

不会正确序列化,因为大小写不匹配。 Guy.FirstName 将为空。这种行为是有道理的,但我真的不知道如何解决这个问题。我是否必须在客户端强制使用字段名称,还是有办法在服务器端进行协调?

一个可能相关的问题:我可以接受通用 JSON 对象并将其序列化为 StringDictionary 或某种简单的键值结构吗?那么无论 JSON 中发送的字段名称是什么,我都可以访问已发送给我的名称和值?现在,我可以读取收到的数据的唯一方法是它是否与预定义的 DataContract 完全匹配。

最佳答案

这是将 json 读入字典的另一种方法:

[DataContract]
public class Contract
{
[DataMember]
public JsonDictionary Registration { get; set; }
}

[Serializable]
public class JsonDictionary : ISerializable
{
private Dictionary<string, object> m_entries;

public JsonDictionary()
{
m_entries = new Dictionary<string, object>();
}

public IEnumerable<KeyValuePair<string, object>> Entries
{
get { return m_entries; }
}

protected JsonDictionary(SerializationInfo info, StreamingContext context)
{
m_entries = new Dictionary<string, object>();
foreach (var entry in info)
{
m_entries.Add(entry.Name, entry.Value);
}
}

public void GetObjectData(SerializationInfo info, StreamingContext context)
{
foreach (var entry in m_entries)
{
info.AddValue(entry.Key, entry.Value);
}
}
}

关于.net - 通用 WCF JSON 反序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2297903/

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