我有以下问题:我有一个IDto
接口和一个Dto
基类来实现所述接口.
基类重写HasId
基类中定义的id
和ManualId
.
然后我还有一个AuthorDto
,它继承自Dto
基类.
现在,当我try 对服务执行http请求(POST
方法)时,ManualId
无法正确传输到服务,即使JSON字符串包含正确的ManualId
.
请帮忙.
我的IDto接口:
public interface IDto : IHasId
{
IDto CloneData();
}
我的dto基类:
public abstract class Dto : HasId, IDto
{
[DataMember]
public override long? Id { get; set; }
[DataMember]
public override Guid ManualId { get; protected set; } = Guid.NewGuid();
public abstract IDto CloneData();
protected bool Equals(Dto other)
{
return base.Equals(other) && Id == other.Id;
}
public override bool Equals(object obj)
{
if(ReferenceEquals(null, obj)) return false;
if(ReferenceEquals(this, obj)) return true;
if(obj.GetType() != GetType()) return false;
return Equals((Dto)obj);
}
public override int GetHashCode()
{
unchecked
{
return(base.GetHashCode() * 397) ^ Id.GetHashCode();
}
}
}
HasId
级:
public abstract class HasId : IHasId
{
public abstract long? Id { get; set; }
public abstract Guid ManualId { get; protected set; }
protected bool Equals(HasId other)
{
return Id == other.Id && ManualId.Equals(other.ManualId);
}
public override bool Equals(object obj)
{
if(ReferenceEquals(null, obj)) return false;
if(ReferenceEquals(this, obj)) return true;
if(obj.GetType() != GetType()) return false;
return Equals((HasId) obj);
}
public override int GetHashCode()
{
unchecked
{
return(Id.GetHashCode() * 397) ^ ManualId.GetHashCode();
}
}
}
执行HttpRequest的类:
public class HttpHelper
{
private readonly HttpClient _client = new();
public async Task<TResult> GetObject<TResult>(string requestUri)
{
var response = await _client.GetAsync(requestUri);
response.EnsureSuccessStatusCode();
var valueInJsonFormat = await response.Content.ReadAsStringAsync();
return JsonConvert.DeserializeObject<TResult>(valueInJsonFormat);
}
public async Task<TResult> PostObject<T, TResult>(T obj, string requestUri)
{
var json = JsonConvert.SerializeObject(obj);
var data = new StringContent(json, Encoding.UTF8, "application/json");
var response = await _client.PostAsync(new Uri(requestUri), data);
if (response.StatusCode != HttpStatusCode.OK)
{
var httpContent =
JsonConvert.DeserializeObject<HttpResponseContent>(await response.Content.ReadAsStringAsync());
try
{
response.EnsureSuccessStatusCode();
}
catch(Exception e)
{
throw new Exception(httpContent?.Detail ?? e.Message, e);
}
}
var result = await response.Content.ReadAsStringAsync();
return JsonConvert.DeserializeObject<TResult>(result);
}
}
这是JSON字符串:
[
{"Author":
{
"Id":1,
"Settings":
{
"Id":1,
"ArchiveXml":false,
"CreatePdfImmediately":false,
"OverwriteExistingXml":false,
"SaveSimilarTopic":false,
"PdfNameTemplate":null,"PdfPath":null,
"ManualId":"624fa6e3-0864-40bf-87c3a7fcaa1421d4"
},
"Name":"Admindef",
"IsAdmin":true,
"PublicKey" : PUBLIC-KEY HERE (removed since its not relevant),
"ManualId":"f15cb1a5-2d66-4ca9-8dc6-1bf5c25bc7f8"},"Operation":0}]